redis集群带密码验证的hiredis客户端

之前一直都是使用单机部署的redis服务器,用着hiredis不亦乐乎,后来公司改为redis集群,突然发现之前的hiredis不能用了,赶紧查了一下资料,终于发现了hiredis也有Cluster模式,刚开始找到的是hiredis-vip,一看这个名字就很屌的样子,vip。看了一下介绍,原来是唯品会这厮弄的,”唯品会,一家专门做特卖的网站!“,我擦嘞,没想到这么多互联网巨头都没弄出来,让人家一个专门给女孩子卖衣服的网站给搞出来了,刷新了我对唯品会的新观。

https://github.com/vipshop/hiredis-vip

言归正传,赶紧clone下来,一下就编译过去了,啥依赖都没有。一看就是个好东西。正准备用上,突然发现一个问题,原来这货是不支持密码验证的,而公司的redis服务器都是带密码的。用了hiredis的方法去AUTH认证,一直报错:NOAUTH Authentication required .。这才发现这货不能进行密码认证,那不是白搞了。不能气馁,继续找找资料,在百度上找了好久也没找到关于hiredis-vip的密码认证的方法,没办法,只好去githua,这边的大神走在比较靠前。果然,找到了一个hiredis-v(Inherited from hiredis-vip, support redis cluster authenticate),一看到这个auth就知道这个人也意思到了这个问题,故将hiredis-vip改造成支持auth认证的,代码只改了一点点就实现了,看来唯品会的兄弟还是太着急了,估计被领导在催,既然这么明显的一个需求都没时间去实现。

https://github.com/wuli1999/hiredis-v

又一次满怀激动的开始了验证,hiredis-v就是在hiredis-vip的基础上,封装了带密码认证的接口,赶紧拿来用,编译通过,开始运行。

connect error : ERR This instance has cluster support disabled
这又是什么鬼,网上一查,原来是我的redis服务器不是集群部署的,原来如此,赶紧找一个集群部署的redis,终于。。。。成功了。哈哈,记录一下(感谢wuli1999)

//sync
#include<stdio.h>
//#include<hircluster.h>
#include<rediscluster.h>

//sync
int main()
{
    int result;
    redisReply* reply = NULL;
    
    redisClusterContext *cc = redisClusterConnect("127.0.0.1:34501,127.0.0.1:34502,127.0.0.1:34503","pass",HIRCLUSTER_FLAG_NULL);
    
    redisClusterContext *cc = redisClusterContextInit();

    redisClusterSetOptionPassword(cc, "redis@pass");

    redisClusterSetOptionAddNodes(cc, "192.168.50.79:8001,192.168.50.80:8001,192.168.50.81:8001");

    redisClusterConnect2(cc);
    
    if(cc == NULL || cc->err)
    {
        printf("connect error : %s\n", cc == NULL ? "NULL" : cc->errstr);
        return -1;
    }
    

    printf("Connect to redisServer Success\n");  
    
    
    int i;

 
    for(i=0; i<5; i++)
    {
      //set
      reply = redisClusterCommand(cc, "set key%d value%d", i, i);
      if(reply == NULL)
      {
        printf("set key%d, reply is NULL, error info: %s\n", i, cc->errstr);
        redisClusterFree(cc);
        return -1;
      }
      printf("set key%d, reply:%s\n", i, reply->str);
      freeReplyObject(reply);
 
      //get
      reply = redisClusterCommand(cc, "get key%d", i);
      if(reply == NULL)
      {
        printf("get key%d, reply is NULL, error info: %s\n", i, cc->errstr);
        redisClusterFree(cc);
        return -1;
      }
      printf("get key%d, reply:%s\n", i, reply->str);
      freeReplyObject(reply);
    }
 
    redisClusterFree(cc);
    return 0;
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值