如何在 Redis 中设置键的流行等级?

How to setup popular rank for keys in Redis?

刚开始使用 Redis 并将其整合到 Node+Express 应用程序中。

我目前正在使用 Redis 存储第三方 API 结果以减少我的应用发出的请求。

示例:用户搜索 "California",我的应用程序检查此查询是否已存在于 Redis 数据库中,如果存在,则获取相关的 JSON 对象。如果不是,Redis 设置键(查询)和值(来自第三方 API 的 JSON 对象)。

我希望能够对提出的查询进行排名。假设 "California" 被搜索了 4 次,而 "Montana" 只被搜索了一次——我想要 return "California".

收集最热门搜索关键字排名的最佳方法是什么?

我能找到的最接近的是 this,但排序集似乎不允许键值 AND。只是一个值和分数。

使用排序集对键进行排序,然后使用辅助哈希来存储值。示例:

ZADD myzset 4 "california" 1 "montana"
HSET myzset:aux_hash "california" "some api result"
HSET myzset:aux_hash "montana" "some other api result"

然后,如果加利福尼亚发生更多搜索,例如,使用 ZINCRBY 来增加其分数:ZINCRBY myzset 1 "california"

最后,当用户查询某物时,检查它是否在 myzset 中(ZSCORE myzset "california" -- 验证这不是 nil)。如果它存在,只需从辅助哈希 (HGET myzset:aux_hash "california") 和 return 中获取值给用户。对于最后两个步骤,您可以将它们放入 Lua 脚本中,以便只访问服务器一次并加快速度,如果您愿意的话。