Redis索引扫描不等于运算符



当实际数据存储在AWS S3上时,我正试图使用Redis排序集作为我的辅助索引。

比方说,如果我想支持像Name!= 'uma'这样的条件,是否有使用内置模式匹配来实现这一点?

例如,让我有下面作为我的排序设置密钥

ZADD mykey 0 uma:7000
ZADD mykey 0 umesh:7001
ZADD mykey 0 mahes:7002

我可以做一些类似ZSCAN mykey 0比赛的事情吗!uma?

我不想在内存中获取所有数据并应用!=在应用层中。

提前感谢

您可以创建一个包含不需要的成员的临时集合,然后使用ZDIFF:

> ZADD mykey 3 uma:7000
(integer) 1
> ZADD mykey 4 umesh:7001
(integer) 1
> ZADD mykey 5 mahes:7002
(integer) 1

添加一些温度值:

> ZADD tempkey 0 uma:7000
(integer) 1

并获得差异:

> ZDIFF 2 mykey tempkey WITHSCORES
1) "umesh:7001"
2) "4"
3) "mahes:7002"
4) "5"

哦。并且一定要清理温度设置:

> UNLINK tempkey
(integer) 1

您可以使用Lua Script+ZSCAN来完成这项工作。以下是实现目标的一句话。

redis-cli eval 'local res = redis.call("zscan", KEYS[1], ARGV[1]); local matches = {}; local kv = res[2]; for i=0,(#kv/2-1) do local k = kv[i * 2 + 1]; local v = kv[i * 2 + 2]; if k ~= ARGV[2] then matches[#matches + 1] = k; matches[#matches + 1] = v; end end res[2] = matches; return res' 1 mykey cursor-starting-from-0 uma

SCAN也有类似的问题。我试图修改答案中的一行,并发表了评论。然而,SCAN的返回值与ZSCAN有很大不同,所以我为它写了一个专门的答案

相关内容

  • 没有找到相关文章

最新更新