我正在尝试获取排序集中的最佳键的值。
这是我目前的查询:

ZREVRANGEBYSCORE genre1 +inf -inf WITHSCORES LIMIT 0 1

这是我的集合中的一个添加示例:
ZADD "genre1|genre2|genre3" 3.25153 "film"

我想以这种方式使用查询
ZREVRANGEBYSCORE *genre1* +inf -inf WITHSCORES LIMIT 0 1

匹配包含“... | genre1 | ...”的键,不仅匹配“genre1”之类的键。
任何帮助将不胜感激

最佳答案

这可以通过两个或三个步骤来完成:

1)使用 SCAN KEYS查找与您的模式匹配的 keys

SCAN 0 MATCH "*genre1*"
1) "9"
2) 1) "genre1|genre2|genre3"
   2) "genre1|genre4"

2)对于每个键,请使用 TYPE 来测试它是否为排序集。仅当您可能在数据库上具有其他genre1键时,这才重要
TYPE "genre1|genre4"
zset

3)为每个键运行ZREVRANGEBYSCORE <key> +inf -inf WITHSCORES LIMIT 0 1

参见this answer on how you can SCAN for a given type。您可以修改Lua脚本以包括ZREVRANGEBYSCORE,并在单个调用中自动获得结果。

最后,考虑根据您的情况考虑是否最好存储类型组合。您可以按流派使用排序集,然后使用 ZUNIONSTORE ZINTERSTORE 获得评分组合。

关于redis - Redis-ZRANGEBYSCORE,其 key 与正则表达式匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59861912/

10-12 03:34
查看更多