2013-04-25 76 views
2

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

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

我猜它归结为:

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

当然,post.ratings_count将简单地取一个属性(如职位就已经被加载)不执行查询。我唯一担心的是$redis.scard将在Redis存储上执行某种“查询”。它可以忽略不计吗?

回答

3

你不应该担心SCARD的命令性能。

redis SCARD命令的时间复杂度为O(1),这意味着它几乎没有成本的Redis做到这一点。

如果您可以负担得起在redis中存储整套数据,那么就不再有用缓存计数了。

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

+0

感谢您的澄清。 – 2013-04-26 08:40:50

+0

@Tommaso Barbugi我是Redis的新手。如果您说我们建议保留缓存计数,这意味着我们每次都更新该列,那么使用redis会有什么好处,因为当我们加载帖子时,它也会包含一个计数字段? – Samnang 2013-10-13 03:38:07