背景说明:
创建了一个Zset (fund.info) ,在对fund.info使用zadd(“thisisatest”)之前,先检查fund.info里面是否已存在value值为"this is a test"的member;
我首先从网上搜索相关的信息,没找到多少消息。
只 找到了 基于JAVA :http://blog.youkuaiyun.com/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");