redis - 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”这样的键。任何帮助将不胜感激
解决方案
这可以通过两个或三个步骤完成:
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
并在一次调用中自动获取结果。
最后,考虑查看存储类型组合是否适合您的情况。您可以使用每个流派的排序集,然后使用ZUNIONSTORE
或ZINTERSTORE
来获得评分组合。
推荐阅读
- .net - .NET web 异步调用包 Azure.Storage.Blobs 挂起
- javascript - 使用用户脚本修改 React 组件
- python - 为什么pycharm一直说没有名为'_tkinter'的模块???我是 python 和 pycharm 的新手
- java - 不支持 mapbox 中的一些细节,我可以手动添加吗?
- javascript - 如何给数组编号(在列表中)
- javascript - 拆分没有单独的两位数的数组
- reactjs - 在道具更改时触发 2 次重新渲染
- python - OpenCV, cv2.approxPolyDP() 在闭合轮廓上绘制双线
- bash - Makefile 目标输出作为 shell 脚本的输入参数
- google-maps - Maps JavaScript API 错误消息“仅用于开发目的”