Redis INCR,SORT和TTL同时进行?

时间:2016-03-17 14:12:28

标签: node.js sorting redis increment ttl

我计划使用Redis为我的项目存储一些信息: - 页面预览 - 点击页面上的特定按钮

关于页面视图,我希望使用信息对所有内容进行排序并获取最常见的10个页面。 但这意味着我需要使用INCR,SORT和TTL,因为我只想要最后一天的观看。 我一直在redis网站上,但似乎我不能使用列表,我可以使用集合或排序集。 所以我有点迷失了。 我应该放弃一些东西吗?

2 个答案:

答案 0 :(得分:2)

你走在正确的轨道上 - 排序套装将为你完成这一任务。

每天使用排序套装,例如对于今天的日期,使用密钥名称,例如page-views:20160317,并在该密钥上使用TTL(EXPIRE命令),这样数据集的大小就不会无限增长。

排序集中的每个成员都是一个唯一的页面 - 我假设您有一个可用于此的ID属性。当然,每个页面/成员的得分是该页面在该时段(日期)内的视图数量。使用ZINCRBY增加分数(或者如果您的Redis版本为> 3.0.2,ZADD命令的INCR开关)。

通过调用ZREVRANGE page-views:20160317 0 9可以生成前10个查看过的页面。

答案 1 :(得分:1)

雷迪斯是瑞士军刀,所以总有不止一种方法可以做到。这是另一个......

您可以使用ZADD递增排序集中页面的查看次数(每次点击一次操作),并使用ZREVRANGE按照最常见的顺序列出页面计数。

为了保持Redis清洁,您可以在每个ZADD之后调用EXPIRE,或者只是每天删除一次(安排EXE,或者可能是LUA脚本?)。或者,在设置名称中包含日期并定期运行作业以清理旧集。