Redis詳解(四)——刪除策略

Redis詳解(四)——刪除策略

Redis中的數據特徵

Redis是一種內存級數據庫,全部數據均存放在內存中,內存中的數據能夠經過TTL指令來獲取其狀態,當 key 不存在時,返回 -2 。 當 key 存在但沒有設置剩餘生存時間時,返回 -1 。 不然,以秒爲單位,返回 key 的剩餘生存時間。redis

數據刪除策略

目標:在內存佔用與CPU佔用之間尋找一種平衡,顧此失彼都會形成redis性能的總體降低,甚至引起服務器宕機或內存泄漏。算法

  • 定時刪除數據庫

    建立一個定時器,當key設置有過時時間,且過時時間到達時,由定時器任務當即執行對鍵的刪除操做服務器

    優勢:節約內存,到時就刪除,快速釋放掉沒必要要的內存佔用性能

    缺點:CPU壓力很大,不管CPU此時負載多高,均佔用CPU,會影響redis服務器響應時間和指令吞吐量blog

    總結:用處理器性能換取存儲空間內存

  • 惰性刪除配置

    數據到達過時時間,不作處理。等下次訪問該數據時發現以過時,刪除,返回不存在內存泄漏

    優勢:節約CPU性能,發現必須刪除的時候才刪除定時器

    缺點:內存壓力很大,出現長期佔用內存數據

    總結:用存儲空間換取處理器性能

  • 按期刪除

    週期性輪詢redis庫中的時效型數據,採用隨機抽取的策略,利用過時數據佔比的方式控制刪除頻度

    特色:CPU性能佔用設置有峯值,檢測頻度可自定義設置。內存壓力不是很大,長期佔用內存的數據會被持續清理。

逐出算法

當新數據進入redis時,若是內存不足怎麼辦?

Redis使用內存存儲數據,在執行每個命令前,會調用freeMemoryIfNeeded()檢測內存是否充足。若是內存不知足新加入數據的最低存儲要求,redis要臨時刪除一些數據爲當前指令清理清理存儲空間。清理數據的策略稱爲逐出算法。

注意:逐出數據的過程不是100%可以清理出足夠的可以使用的內存空間,若是不成功則反覆執行。當對全部數據嘗試完畢後,若是不能達到內存清理的要求,將報OOM錯誤。

影響數據逐出的相關配置

相關文章
相關標籤/搜索