使用C/C++开发redis cluster集群(支持geo命令和TLS认证)

      最近项目要把收集到的地图上的点存储到redis中,然后使用geo命令处理,所以让我搞redis集群搭建,这个简单,网上都是,但是要用C++去连接集群而且支持geo命令和TLS认证,这就有点东西了,最后还是搞好了,记录一下。

1.安装hiredis

git clone https://github.com/redis/hiredis

cd hiredis

make USE_SSL=1

sudo make install

2.安装hiredis-cluster

git clone https://github.com/Nordix/hiredis-cluster.git

cd hiredis-cluster

mkdir build

cd build

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_SSL=ON ..

make

到这里原始的库不自带geo指令,需要我们自己添加,找到command.c和command.h,修改源码

 

 

 修改完成后重新make一下,这样库里就支持我们添加的geo指令了。

3.编写程序调用 ,增加TLS认证

#include "hiredis/hiredis_ssl.h"
#include "hiredis/hiredis.h"
#include "hiredis_cluster/hircluster_ssl.h"
#include "hiredis_cluster/hircluster.h"
#include <stdio.h>
#include <stdlib.h>

#define CLUSTER_NODE_TLS "127.0.0.1:6378,127.0.0.1:6379"
#define CLUSTER_PASSWORD "<PASSWORD>"

int main(int argc, char **argv) {
    UNUSED(argc);
    UNUSED(argv);

    redisSSLContext *ssl;
    redisSSLContextError ssl_error;

    redisInitOpenSSL();
    ssl = redisCreateSSLContext(NULL, "/etc/ssl/certs", NULL, NULL,
                                NULL, &ssl_error);
if (!ssl) {
        printf("SSL Context error: %s\n", redisSSLContextGetError(ssl_error));
        exit(1);
    }

    struct timeval timeout = {5, 500000}; // 5.5s

    redisClusterContext *cc = redisClusterContextInit();
    redisClusterSetOptionAddNodes(cc, CLUSTER_NODE_TLS);
    redisClusterSetOptionConnectTimeout(cc, timeout);
    redisClusterSetOptionRouteUseSlots(cc);
    redisClusterSetOptionEnableSSL(cc, ssl);
    redisClusterSetOptionPassword(cc, CLUSTER_PASSWORD);
    redisClusterConnect2(cc);
    if (cc && cc->err) {
        printf("Error: %s\n", cc->errstr);
        // handle error
        exit(-1);
    }

    redisReply *reply = (redisReply *)redisClusterCommand(cc, "GEOADD Sicily 13.361389 38.115556 %s 15.087269 37.502669 %s", "Catania", "Palermo");
   if (cc && cc->err) {
         printf("Error: %s\n", cc->errstr);
   }
    freeReplyObject(reply);


    redisClusterFree(cc);
    redisFreeSSLContext(ssl);
    return 0;
}

gcc hiredisc-test.c -o hiredisc-test -L/usr/local/lib -lhiredis_cluster -lhiredis_cluster_ssl -lhiredis -lhiredis_ssl

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值