Redis的過時策略和內存淘汰策略

  • Redis的過時策略:一般有三種,Redis中同時使用惰性過時和按期過時兩種過時策略組合。
    • 定時過時:每一個設置過時時間的key都須要建立一個定時器,到過時時間就會當即清除。該策略能夠當即清除過時的數據,對內存很友好;
                           可是會佔用大量的CPU資源去處理過時的數據,從而影響緩存的響應時間和吞吐量。
    • 惰性過時:只有當訪問一個key時,纔會判斷該key是否已過時,過時則清除。該策略能夠最大化地節省CPU資源,卻對內存很是不友好。
                           極端狀況可能出現大量的過時key沒有被再次訪問,從而不會被清除,佔用大量內存。
    • 按期過時:每隔一段時間,會掃描必定數量的數據庫的expires字典中必定數量的key,並清除其中已過時的key。該策略是前兩種方案的
                          一種折中方案。經過調整定時掃描的時間間隔和每次掃描的定時限定耗時,能夠再不一樣狀況下使得CPU和內存資源達到最優
                          的平衡效果。(expires字典會保存全部設置了過時時間的key的過時時間,其中,key是指向鍵空間中的某個鍵的指針,value
                          是該鍵的毫秒精度的UNIX時間戳表示的過時時間。鍵空間是指該Redis集羣中保存的全部鍵。)
  • Redis的內存淘汰策略:Redis的內存淘汰策略是指在Redis的用於緩存不足時,怎麼處理須要新寫入且須要申請額外空間的數據。
    • noeviction:當內存不足以容納新寫入數據時,新寫入操做會報錯。
    • allkeys-random:當內存不足以容納新寫入數據時,在鍵空間中,隨機移除某個key。
    • allkeys-lru:當內存不足以容納新寫入數據時,在鍵空間中,移除最近最少使用的key。
    • volatile-lru:當內存不足以容納新寫入數據時,在設置了過時時間的鍵空間中,移除最近最少使用的key。
    • volatile-random:當內存不足以容納新寫入數據時,在設置了過時時間的鍵空間中,隨機移除某個key。
    • volatile-ttl:當內存不足以容納新寫入數據時,在設置了過時時間的鍵空間中,有更早過時時間的key優先移除。

總結:Redis的內存淘汰策略的選取並不會影響過時的key的處理。內存淘汰策略用於處理內存不足時須要申請額外空間的數據;過時策略用於處理
             過時的緩存數據。數據庫