刚开始使用 Redis 并将其整合到 Node+Express 应用程序中。
我目前正在使用 Redis 存储第三方 API 结果,以减少我的应用发出的请求。
示例:用户搜索“加利福尼亚”,我的应用程序检查该查询是否已存在于 Redis 数据库中,如果存在,则获取相关的 JSON 对象。如果不是,Redis 会设置键(查询)和值(来自第三方 API 的 JSON 对象)。
我希望能够对所做的查询进行排名。假设“California”被搜索了 4 次,而“Montana”只被搜索了一次——我想返回“California”。
收集 HitTest 门搜索键排名的最佳方法是什么?
我能找到的最接近的是 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"
) 中获取值并将其返回给用户。对于最后两个步骤,您可以将它们放入 Lua 脚本中,以便只访问服务器一次并加快速度,如果您愿意的话。
关于node.js - 如何在 Redis 中设置键的流行等级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32662107/