2013-04-25 80 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