Redis和Rails计数器缓存列

时间:2013-04-25 16:05:11

标签: ruby-on-rails redis

我目前在Rails中使用计数器缓存列,但我开始对关联(评级)执行更复杂的查询。出于性能原因,我将数据移动到Redis中。

我的问题是,在Redis中存储所有数据时,计数器缓存列是否仍然相关,或者Redis会使这种方法过时(并且只是在Redis存储上执行计数)?

我想这归结为:

post.ratings_count # cache_column, table in sql database
$redis.scard("post:123:ratings")

当然,post.ratings_count只会获取一个属性,而不是执行查询(因为帖子已经加载)。我唯一担心的是$redis.scard会执行某种“查询”问题。在Redis商店。它可以忽略不计吗?

1 个答案:

答案 0 :(得分:3)

你不应该担心SCARD命令的表现。

redis SCARD命令具有时间复杂度O(1)这意味着redis完全没有成本。

如果你有能力将全套存储在redis中,那么获得缓存计数就不再有用了。

不幸的是,你总是没有足够的空间来存储redis中的所有东西(redis存储必须适合你的ram)所以在这种情况下有一个缓存的计数列仍然有意义。