node.js - 如何在 Redis 中设置键的流行等级?

标签 node.js search redis ranking

刚开始使用 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/

相关文章:

javascript - 使用 Node 搜索 JSON 数组中的项目(最好不进行迭代)

node.js - Meteor Mongo BulkOp 将 ObjectID 转换为普通对象

node.js - querySelectorAll() 与 jsdom 一起使用时返回空 Node 列表

caching - WebApi - Redis 缓存与输出缓存

javascript - 如何 require() 目录中的所有文件并发送参数

search - 如何根据 AEM 中的属性类型进行搜索

algorithm - 探索算法

javascript - 如何在一系列数组中搜索特定匹配并显示结果

caching - 获取上次访问给定 Redis key 的时间

redis - 在redis中创建结构