我正在尝试获取排序集中的最佳键的值。
这是我目前的查询:
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/