我目前在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商店。它可以忽略不计吗?
答案 0 :(得分:3)
你不应该担心SCARD命令的表现。
redis SCARD命令具有时间复杂度O(1)这意味着redis完全没有成本。
如果你有能力将全套存储在redis中,那么获得缓存计数就不再有用了。
不幸的是,你总是没有足够的空间来存储redis中的所有东西(redis存储必须适合你的ram)所以在这种情况下有一个缓存的计数列仍然有意义。