Redis如何淘汰過時的keys: set name wx 3600算法
惰性刪除數據庫
概念:當一些客戶端嘗試訪問它時,key會被發現並主動的過時 聽任鍵過時無論,可是每次從鍵空間中獲取鍵時,都檢查取得的鍵是否過時,若是過時的話,就刪除該鍵 特色:CPU友好,但若是一個key再也不使用,那麼它會一直存在於內存中,形成浪費
定時刪除服務器
概念:設置鍵的過時時間的同時,建立一個定時器(timer),讓定時器在鍵的過時時間來臨時,當即執行對鍵的刪除操做
按期刪除函數
隔一段時間,程序就對數據庫進行一次檢查,刪除裏面的過時鍵,至於要刪除多少過時鍵, 以及要檢查多少個數據庫,則由算法決定。 即設置一個定時任務,好比10分鐘刪除一次過時的key;間隔小則佔用CPU,間隔大則浪費內存 例如Redis每秒處理: 1. 測試隨機的20個keys進行相關過時檢測。 2. 刪除全部已通過期的keys。 3. 若是有多於25%的keys過時,重複步奏1.
Redis服務器實際使用的是惰性刪除和按期刪除兩種策略:經過配合使用這兩種刪除策略,服務器能夠很好地在合理使用CPU時間和避免浪費內存空間之間取得平衡。測試
惰性刪除策略是怎麼實現?經過expireIfNeeded函數,當咱們操做key的時候進行判斷key是否過時code
按期刪除策略是怎麼實現的?經過activeExpireCycle函數,serverCron函數執行時,activeExpireCycle函數就會被調用,規定的時間裏面分屢次遍歷服務器的expires字典隨機檢查一部分key的過時時間,並刪除其中的過時keyserver