C++ redis zset 判断特定value是否存在

背景说明:

创建了一个Zset (fund.info) ,在对fund.info使用zadd(“thisisatest”)之前,先检查fund.info里面是否已存在value值为"this is a test"的member;


我首先从网上搜索相关的信息,没找到多少消息。

只 找到了 基于JAVA  :http://blog.csdn.net/sparkexpert/article/details/78351558

刚开始我参考他的作法使用zrank进行判断

// 比较strzsetvalue在zset 中的排位,如果>=0,则说明存在
			if (pClient->zrank("fund.info","thisisatest") >= 0)
			{
			}
			else  // 反之则不存在
			{
				pClient->zadd("fund.info",100.00,"thisisatest");
			}
这里出现了一个问题,当我的fund.info不存在“thisisatest”时,zrank()函数会直接报错“unexpected prefix for integer reply”;

这个问题还不清楚原因,有大神帮忙解释下嘛?

下面贴出我的解决办法:

PS:我的解决办法只用来判断fund.info最后一个member和要插入的值是否匹配重复。如果你想与fund.info的全部member匹配重复,可以通过循环来匹配;

bool isRepeatData  = false;

//  先判断fund.info是否存在member
		if (pClient->zcard("fund.info") > 0)
		{
			std::vector<std::string>  vSecondDataEx;
			pClient->zrange(strZsetName,-1,-1,vSecondDataEx); // 取最后的member
			if (vSecondDataEx[0] == "thisisatest")   // 用最后的member的value值与要插入的value值比较
			{
				isRepeatData = true;
			}
		}
		if (isRepeatData) // 如果是重复数据则直接返回
		{
			return  ;
		}
		pClient->zadd("fund.info",100.00,"thisisatest");

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值