redis - redis中获取和查询排序集,以及排序集键过期的解决方案
问题描述
我需要 Redis 中的索引结构。我有一个排名算法,应该存储数据ZADD
ZADD myset 125 id::1
ZADD myset 17 id::2
然后,我需要计数和得分最高的数据。
ZCOUNT myset -inf +inf
ZPOPMAX myset
提供我需要的东西。但是,ZPOPMAX
不仅带来了最顶层,而且还删除了它。
问题 1
我需要得分最高的一个,但我不能将它从排序列表中删除。
问题2
我需要为排序列表中的每个项目设置过期时间。我知道,过期只能在 Redis 中的键上设置。但我需要一种动态排名,例如目前我排名最高的数据是 125,但 12 小时后,它将是 17,因为第一项将是其 TTL 之后的墓碑。
谢谢
解决方案
您可以探索与Sorted Set
HERE相关的 Redis 命令
问题 1
我需要得分最高的一个,但我不能将它从排序列表中删除。
您可以使用以下命令:
ZRANGE myset 0 0 REV
获取更高的分数ZRANGE myset 0 0
取最低分。
问题2
我需要为排序列表中的每个项目设置过期时间。我知道,过期只能在 Redis 中的键上设置。但我需要一种动态排名,例如目前我排名最高的数据是 125,但 12 小时后,它将是 17,因为第一项将是其 TTL 之后的墓碑。
但是为此,您不能使用任何 Redis 命令来使Sorted Set
键过期,我建议使用 2 个分开Sorted Set
的其中一个与您的常规评分系统一起增加/降低分数,第二个与第一个具有时间分数的键相同。使用过期的作业和查询键,并从两者中删除键Sorted Sets
。
您可以Sorted Sets
通过ZRANGEBYSCORE
查看链接查询使用情况。
要获得有关第二个问题的更多想法,您可以阅读此内容。
推荐阅读
- authentication - 带有集线器的 GitHub Actions 导致未经授权 (HTTP 401) 凭据错误
- visual-studio-code - 如何禁用 .eslintrc.js 中的 '{'.eslintobject-curly-spacing 后不应有空格
- html - 链接外部样式表
- visual-studio-code - 禁止 Prettier 在 VS Code 中格式化 HTML 文件中的内联 JS
- javascript - 尝试使用具有 webpack 的 React App 从 Web 浏览器将配置设置保存到用户计算机上的 JSON 文件?
- git - 如何从不同的分支 [git] 获取新文件?
- javascript - 如何随机删除这些绿点?
- flutter - 如何更新flutter web上的内容?
- visual-studio-code - 摆脱 vs 代码中烦人的矩形高光
- reporting-services - SSRS 多值参数计数表达式