【问题标题】:Redis - ZRANGEBYSCORE with key matching a regexRedis - ZRANGEBYSCORE 与正则表达式匹配的键
【发布时间】:2020-01-22 14:28:16
【问题描述】:

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

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】:

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

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

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

    2) 对于每个键,使用TYPE 来测试它是否是一个排序集。仅当您在 db 上可能有其他 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 并在一次调用中自动获取结果。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 2022-01-22
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多