2012-07-10 45 views
1

我正试图在redis上实现一个评分系统。我从来没有经验过。Redis独特增量

什么我的应用程序应该做的是增加值,仅当用户尚未投票,所以我想的是这样的:

INCR voteme 

,但只有当这是尚未已经增加,所以想要做到以下几点:

SET voteme:voterip 1 

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

任何想法?


EXTRA问题:

我想使这个数据持续写入所产生的数(例如:24)到相应的用户,在MongoDB中。一些伪代码会有很大的帮助

回答

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.因此,运行此多/ exec块,检查SADD的结果,获取该集合的基数(票数),以及将该基数推送到另一个存储只是在该组已被交易改变。

这样,您可以使计数器保持最新状态(实时),同时过滤无用的投票事件。