我正在尝试在redis上实施评分系统。我没有任何经验。
我的应用应该做的是仅在用户尚未投票时增加一个值,所以我想到这样的事情:
INCR voteme
但只有在尚未增加的情况下,所以希望执行以下操作:
SET voteme:voterip 1
所以我会计算元素。问题是我认为这在redis中是不可行的,并且必须考虑另一种方法。
有什么想法吗?
额外问题:
我想通过将结果计数(例如:24)写入mongodb中的相应用户来使这些数据持久化。一些伪代码会有很大的帮助
答案 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的结果,获取集合的基数(投票数),并将基数推送到另一个商店事务已改变该集合。
这样,您可以在持久存储中实时更新计数器(实时),同时过滤无用的投票事件。