1

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

我的应用程序应该做的是仅在用户尚未投票时才增加价值,所以我在想这样的事情:

INCR voteme

但前提是这还没有增加,所以想做以下事情:

SET voteme:voterip 1

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

有任何想法吗?


额外的问题:

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

4

1 回答 1

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 命令返回有效添加到集合中的项目数。如果 item 已经存在,则返回 0。因此很容易运行这个 multi/exec 块,检查 SADD 的结果,获取集合的基数(投票数),并且仅在以下情况下将基数推送到另一个存储该集合已被事务更改。

通过这种方式,您可以(实时)在持久存储中保持计数器最新,同时过滤无用的投票事件。

于 2012-07-11T08:22:20.423 回答