Redis刪除策略與淘汰策略

Redis是一種內存級數據庫,數據都存在內存中,但是針對於已經過期的數據,reids不會立刻刪除

只是會存儲在expires中,當執行刪除策略的時候,纔會從expires中尋找對應的數據存儲的地址,在存儲空間中找到對應的數據進行刪除。

數據刪除其實就是內存和CPU佔用之間尋找平衡,CPU才能去處理事情,針對過期數據,要進行刪除的時候,一半有三種策略

1.定時刪除  顧名思義,當key設置有過期時間,時間到了,定時器任務立即執行刪除,相當於消耗CPU來減少內存使用,拿時間換空間。

2.惰性刪除 就是說,數據到達過期時間的時候,先不做處理,等到下次訪問數據的時候,進行訪問,如未過期,返回數據,如過期,則刪除。這就相當於節約了CPU但佔用了內存,拿空間換時間。

3.定期刪除,就是以上兩種的折中,Redis啓動服務器初始化的時候,讀取配置的server.hz的值,這個就是一秒鐘執行的次數

每一秒鐘執行server.hz次  ---->serverCron()----->databaseCron------->acticeExpireCycle()  對每一個expires檢測,隨機挑選W個key進行檢測,如果key已經超時,則刪除,要是這一輪中刪除的key數量超過25%則循環這個過程,如果沒有,則進入下一個expires檢測。

 

數據淘汰策略

這個是redis內存不足的時,執行的,redis執行命令之前,都會用freeMemoryIfNeeded()方法,檢測這次內存是否充足,如果不滿足加入新數據,則會執行淘汰策略(淘汰未過期的數據)

檢測易失去數據(一般是有定時,會過期的數據的)

    volatile-lru:挑選最近最少使用的數據淘汰
    volatile-lfu:挑選最近使用次數最少的數據淘汰
    volatile-ttl:挑選將要過期的數據淘汰
    volatile-random:任意選擇數據淘汰

全庫數據

     allkeys-lru:挑選最近最少使用的數據淘汰      allkeLyRs-lfu::挑選最近使用次數最少的數據淘汰      allkeys-random:任意選擇數據淘汰,相當於隨機