Redis的過期策略和內存淘汰策略
阿新 • • 發佈:2019-01-14
expires 友好 定期 申請 精度 移除 bsp 優先 數據庫
- 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的處理。內存淘汰策略用於處理內存不足時需要申請額外空間的數據;過期策略用於處理
過期的緩存數據。
Redis的過期策略和內存淘汰策略