redis 的 key 清理,也就是內存回收的時候主要分爲:過時刪除策略與 內存淘汰策略兩部分。redis
刪除到達過時時間的 key 。算法
對於每個設置了過時時間的 key 都會建立一個定時器,一旦達到過時時間都會刪除。這種方式當即清除過時數據,對內存比較好,dom
可是有缺點是:佔用了大量 CPU 的資源去處理過時數據,會影響 redis 的吞吐量 和 響應時間。cdn
當訪問一個 key 的時候,纔會判斷該 key 是否過時,若是過時就刪除。該方式能最大限度節省 CPU 的資源。內存
可是對內存不太好,有一種比較極端的狀況:出現大量的過時 key 沒有被再次訪問,由於不會被清除,致使佔用了大量的內存。資源
每隔一段時間,掃描redis 中過時key 的字典,並清除部分過時的key。這種方式是前倆種一種折中方法。不一樣的狀況下,調整定時掃描時間間隔,讓CPU 與 內存達到最優。it
redis 內存淘汰策略是指達到maxmemory極限時,使用某種算法來決定來清理哪些數據,以保證新數據存入。io
這種就是從設置了expires過時時間的結果集中選出一部分key淘汰,挑選的算法有:class
volatile-random 從設置了過時時間的結果集中隨機挑選key刪除。配置
volatile-lru 從設置了過時時間的結果集中挑選上次使用時間距離如今最久的key開始刪除
volatile-ttl 從設置了過時時間的結果集中挑選可存活時間最短的key開始刪除(也就是從哪些快要過時的key中先刪除)
volatile-lfu 從過時時間的結果集中選擇使用頻率最低的key開始刪除(這是Redis 4.0版本後新增的策略)