Redis独特的增量

时间:2012-07-10 21:37:45

标签: redis unique increment

我正在尝试在redis上实施评分系统。我没有任何经验。

我的应用应该做的是仅在用户尚未投票时增加一个值,所以我想到这样的事情:

INCR voteme

但只有在尚未增加的情况下,所以希望执行以下操作:

SET voteme:voterip 1

所以我会计算元素。问题是我认为这在redis中是不可行的,并且必须考虑另一种方法。

有什么想法吗?


额外问题:

我想通过将结果计数(例如:24)写入mongodb中的相应用户来使这些数据持久化。一些伪代码会有很大的帮助

1 个答案:

答案 0 :(得分:1)

我不会存储计数器,而是直接存储包含已经投票的所有用户的集合。

假设为用户1组织了一次投票。每次用户X投票给用户1时,您都可以执行:

 SADD user:1:votes X

可以轻松检索用户1的投票数:

 SCARD user:1:votes

现在,如果您需要将此计数与其他商店保持同步,则可以执行(仍然假设用户X为用户1投票):

 MULTI
 SADD users:1:votes X
 SCARD user:1:votes
 EXEC

技巧是SADD命令返回有效添加到集合中的项目数。如果该项已经存在,则返回0.因此,运行此multi / exec块非常容易,检查SADD的结果,获取集合的基数(投票数),并将基数推送到另一个商店事务已改变该集合。

这样,您可以在持久存储中实时更新计数器(实时),同时过滤无用的投票事件。

相关问题