將redis當做使用LRU算法的緩存來使用
LRU是Redis唯一支持的回收方法。
maxmemory配置指令用于配置Redis存儲數據時指定限制的內存大小。
如果你想把Redis當做一個緩存來用,所有的key都有過期時間,那么你可以考慮 使用以下設置(假設最大內存使用量為2M):
maxmemory 2mb
maxmemory-policy allkeys-lru
設置maxmemory為0代表沒有內存限制。
以上設置并不需要我們的應用使用EXPIRE(或相似的命令)命令去設置每個key的過期時間,因為 只要內存使用量到達2M,Redis就會使用類LRU算法自動刪除某些key。
相比使用額外內存空間存儲多個鍵的過期時間,使用緩存設置是一種更加有效利用內存的方式。而且相比每個鍵固定的 過期時間,使用LRU也是一種更加推薦的方式,因為這樣能使應用的熱數據(更頻繁使用的鍵) 在內存中停留時間更久。
基本上這么配置下的Redis可以當成memcached使用。
當我們把Redis當成緩存來使用的時候,如果應用程序同時也需要把Redis當成存儲系統來使用,那么強烈建議 使用兩個Redis實例。一個是緩存,使用上述方法進行配置,另一個是存儲,根據應用的持久化需求進行配置,并且 只存儲那些不需要被緩存的數據。
回收策略
當maxmemory限制達到的時候Redis會使用的行為由 Redis的maxmemory-policy配置指令來進行配置。
以下的策略是可用的:
noeviction:返回錯誤當內存限制達到并且客戶端嘗試執行會讓更多內存被使用的命令(大部分的寫入指令,但DEL和幾個例外)
allkeys-lru: 嘗試回收最少使用的鍵(LRU),使得新添加的數據有空間存放。
volatile-lru: 嘗試回收最少使用的鍵(LRU),但僅限于在過期集合的鍵,使得新添加的數據有空間存放。
allkeys-random: 回收隨機的鍵使得新添加的數據有空間存放。
volatile-random: 回收隨機的鍵使得新添加的數據有空間存放,但僅限于在過期集合的鍵。
volatile-ttl: 回收在過期集合的鍵,并且優先回收存活時間(TTL)較短的鍵,使得新添加的數據有空間存放。
參考: http://www.redis.cn/topics/config.html
http://www.redis.cn/topics/lru-cache.html