有序集合zset中判断value是否存在可以使用zrank
创建了一个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");
php 版本不存在的话会直接返回false
所以可以直接判断
$res = redis()->zRank(Consult::ASK_COMMON_PAY_ZSET, $uid.'_'.$phone);
if ($res === false) {
redis()->zAdd(Consult::ASK_COMMON_PAY_ZSET, time() + 86400, $uid.'_'.$phone);
}
Tags : 本文未设置标签
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站大部分内容收集于互联网,如果有侵权内容、不妥之处,请联系删除。敬请谅解!