首页 > 解决方案 > Redis - ZRANGEBYSCORE 与正则表达式匹配的键

问题描述

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

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”这样的键。任何帮助将不胜感激

标签: redis

解决方案


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

1) 使用SCANKEYS查找keys匹配您的模式。

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

2)对于每一个key,用TYPE它来测试它是否是一个Sorted Set。仅当您在 db 上可能有其他类型的键时,这才重要

TYPE "genre1|genre4"
zset

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

有关如何扫描给定类型的信息,请参阅此答案。您可以修改 Lua 脚本以包含ZREVRANGEBYSCORE并在一次调用中自动获取结果。

最后,考虑查看存储类型组合是否适合您的情况。您可以使用每个流派的排序集,然后使用ZUNIONSTOREZINTERSTORE来获得评分组合。


推荐阅读