2013-01-11 37 views
1

我想在我的Rails應用中使用gem "redis-store"作爲緩存存儲。與memcached不同,redis不清除未使用的密鑰,但我可以在每個密鑰上使用EXPIRE命令(通過:expire_in選項)來限制每個密鑰的生存期。Redis中緩存的最佳expire_in值

然後,我想用我的模型(其中包括idupdated_at)的cache_key作爲redis鍵的一部分,用於緩存。所以當模型更新時,新的緩存鍵將被創建,而舊的緩存鍵將不會被使用。

所以問題是,選擇哪個到期時間?如果設置的太小,它將消除緩存帶來的好處,如果時間太長 - 它會使用未使用的數據填充redis,從而可能(可能)降低性能。黃金的意思在哪裏?

+1

緩存過期是編程中唯一的兩個難點之一:) –

回答

1

我建議使用Redis的LRU過期策略讓Redis過期最近最少使用的密鑰本身。這樣,您不必擔心自己的密鑰到期。

根據您的建議使用模型的cache_key確實會在模型更改時生成新的密鑰。您的意見不再使用該模型的「舊」密鑰,Redis將最終終止它們。有關如何將Redis配置爲LRU存儲區的信息,請參閱http://redis.io/topics/config

+0

看起來不錯!這是一個新的redis功能還是我錯過了過去的某些東西? – MikDiet

0

肯定這是取決於應用程序?如果這是一個非常昂貴的頁面,您希望儘可能少地重新計算,但如果它變化很快,則沒有選擇。

我親自試驗。選擇一些數字,看看它們如何影響性能。高起點(相信你的數據庫,在這種情況下Redis),然後調整它們,如果你有問題。