我想跟踪某些用户活动并使用时间限制限制此活动。这方面的一个例子可能是SO强制执行的每日投票数。以下哪种方法在可扩展性和易用性方面提供了更好的解决方案?
方法1:
方法2
如果重要的话,我正在使用ColdFusion和MySQL。
答案 0 :(得分:1)
假设您只关心每个人的这些数据,并且不会得到这个数据的聚合,我建议你选择支持TTL的key / val商店。 Redis听起来很符合你的要求。
虽然它在内存中运行,但它会定期对磁盘进行快照(这意味着速度很快,如果出现故障,你会得到最多的东西)。
轻松互动,与“方法2”一样,但无需担心管理大型内存结构。
示例设置
使用每日SO点数情景,我们将有一天的时间范围,我们的值将是一个简单的值,在某些用户活动中递增。
我们的密钥将是用户ID和当前时间范围(在本例中为日期)的组合。在我们设置了密钥后,我们设置了一个ttl,这意味着在今天结束后,密钥最终将会过期并自行清理。
redis> incr user123-2011-10-09
(integer) 1 # no value found for key, defaulting to 1
# if this key already had a value it would be incremented.
redis> expire user123-2011-10-09 86400
(integer) 1 # expiration of 1 day was successful
redis> get user123-2011-10-09
"1" # current value of user key
有关这些命令的更多信息(incr,get,expire和ttl对您最感兴趣)可以在redis commands reference上找到(完成交互式shell以尝试这些操作)。
修改强>
这种方法显然可以应用于任意数量的k / v存储,我在这里使用Redis作为一个具体的例子,因为我认为它非常符合要求。