日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis的LRU算法

發布時間:2025/3/20 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis的LRU算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

整理自官方文檔:將redis當做使用LRU算法的緩存來使用

當Redis被當做緩存來使用,當你新增數據時,讓它自動地回收舊數據是件很方便的事情。這個行為在開發者社區非常有名,因為它是流行的memcached系統的默認行為。

LRU是Redis唯一支持的回收方法。

回收策略

當maxmemory限制達到的時候Redis會使用的行為由 Redis的maxmemory-policy配置指令來進行配置。

以下的策略是可用的:

  • noeviction:返回錯誤當內存限制達到并且客戶端嘗試執行會讓更多內存被使用的命令(大部分的寫入指令,但DEL和幾個例外)
  • allkeys-lru: 嘗試回收最少使用的鍵(LRU),使得新添加的數據有空間存放。
  • volatile-lru: 嘗試回收最少使用的鍵(LRU),但僅限于在過期集合的鍵,使得新添加的數據有空間存放。
  • allkeys-random: 回收隨機的鍵使得新添加的數據有空間存放。
  • volatile-random: 回收隨機的鍵使得新添加的數據有空間存放,但僅限于在過期集合的鍵。
  • volatile-ttl: 回收在過期集合的鍵,并且優先回收存活時間(TTL)較短的鍵,使得新添加的數據有空間存放。

如果沒有鍵滿足回收的前提條件的話,策略volatile-lru,?volatile-random以及volatile-ttl就和noeviction 差不多了。

回收進程如何工作

理解回收進程如何工作是非常重要的:

  • 一個客戶端運行了新的命令,添加了新的數據。
  • Redi檢查內存使用情況,如果大于maxmemory的限制, 則根據設定好的策略進行回收。
  • 一個新的命令被執行,等等。
  • 所以我們不斷地穿越內存限制的邊界,通過不斷達到邊界然后不斷地回收回到邊界以下。

如果一個命令的結果導致大量內存被使用(例如很大的集合的交集保存到一個新的鍵),不用多久內存限制就會被這個內存使用量超越。

近似LRU算法

Redis的LRU算法并非完整的實現。這意味著Redis并沒辦法選擇最佳候選來進行回收,也就是最久未被訪問的鍵。相反它會嘗試運行一個近似LRU的算法,通過對少量keys進行取樣,然后回收其中一個最好的key(被訪問時間較早的)。

不過從Redis 3.0算法已經改進為回收鍵的候選池子。這改善了算法的性能,使得更加近似真是的LRU算法的行為。

Redis LRU有個很重要的點,你通過調整每次回收時檢查的采樣數量,以實現調整算法的精度。

?

Redis為什么不使用真實的LRU實現是因為這需要太多的內存。不過近似的LRU算法對于應用而言應該是等價的。

轉載于:https://my.oschina.net/fusublog/blog/3028603

總結

以上是生活随笔為你收集整理的Redis的LRU算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。