我正在尝试在 redis 上实现评分系统。我没有任何经验。
我的应用程序应该做的是仅在用户尚未投票时才增加价值,所以我在想这样的事情:
INCR voteme
但前提是这还没有增加,所以想做以下事情:
SET voteme:voterip 1
所以我会计算元素。问题是我认为这在 redis 中是不可行的,必须考虑另一种方法。
有任何想法吗?
额外的问题:
我想通过将结果计数(例如:24)写入mongodb中的相应用户来使这些数据持久化。一些伪代码会有很大帮助
我不会存储一个计数器,而是直接存储一个包含所有已经投票的用户的集合。
假设为用户 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 命令返回有效添加到集合中的项目数。如果 item 已经存在,则返回 0。因此很容易运行这个 multi/exec 块,检查 SADD 的结果,获取集合的基数(投票数),并且仅在以下情况下将基数推送到另一个存储该集合已被事务更改。
通过这种方式,您可以(实时)在持久存储中保持计数器最新,同时过滤无用的投票事件。