最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis中LRU算法和LFU算法的區(qū)別小結(jié)

 更新時間:2023年12月10日 10:38:01   作者:從0到1的旅行家  
在Redis中,LRU算法和LFU算法是兩種常用的緩存淘汰算法,它們可以幫助我們優(yōu)化緩存性能,本文主要介紹了Redis中LRU算法和LFU算法的區(qū)別,感興趣的可以了解一下

 一、LRU

LRU(最近最少使用):LRU策略基于"最近使用原則",即最近被訪問的項目具有更高的保留優(yōu)先級。當緩存空間已滿,而需要插入新項目時,LRU策略會替換最近最少使用的項目。這種策略假設最近被訪問的項目更有可能在近期再次使用,因此將較長時間沒有被使用的項目替換出去。

簡單來說就是淘汰很久沒用的數(shù)據(jù)或項目。

LRU的實現(xiàn)

傳統(tǒng) LRU 算法的實現(xiàn)是基于「鏈表」結(jié)構,鏈表中的元素按照操作順序從前往后排列,最新操作的鍵會被移動到表頭,當需要內(nèi)存淘汰時,只需要刪除鏈表尾部的元素即可,因為鏈表尾部的元素就代表最久未被使用的元素。

Redis 并沒有使用這樣的方式實現(xiàn) LRU 算法,因為傳統(tǒng)的 LRU 算法存在兩個問題:

  • 需要用鏈表管理所有的緩存數(shù)據(jù),這會帶來額外的空間開銷;
  • 當有數(shù)據(jù)被訪問時,需要在鏈表上把該數(shù)據(jù)移動到頭端,如果有大量數(shù)據(jù)被訪問,就會帶來很多鏈表移動操作,會很耗時,進而會降低 Redis 緩存性能。

Redis 是如何實現(xiàn) LRU 算法的?

Redis 實現(xiàn)的是一種近似 LRU 算法,目的是為了更好的節(jié)約內(nèi)存,它的實現(xiàn)方式是在 Redis 的對象結(jié)構體中添加一個額外的字段,用于記錄此數(shù)據(jù)的最后一次訪問時間

當 Redis 進行內(nèi)存淘汰時,會使用隨機采樣的方式來淘汰數(shù)據(jù),它是隨機取 5 個值(此值可配置),然后淘汰最久沒有使用的那個。

Redis 實現(xiàn)的 LRU 算法的優(yōu)點:

  • 不用為所有的數(shù)據(jù)維護一個大鏈表,節(jié)省了空間占用;
  • 不用在每次數(shù)據(jù)訪問時都移動鏈表項,提升了緩存的性能;

但是 LRU 算法有一個問題,無法解決緩存污染問題,比如應用一次讀取了大量的數(shù)據(jù),而這些數(shù)據(jù)只會被讀取這一次,那么這些數(shù)據(jù)會留存在 Redis 緩存中很長一段時間,造成緩存污染。

二、LFU

LFU(最不經(jīng)常使用):LFU策略基于"最不經(jīng)常使用原則",即使用次數(shù)最少的項目具有較低的保留優(yōu)先級。當緩存空間已滿,而需要插入新項目時,LFU策略會替換使用次數(shù)最少的項目。這種策略假設使用頻率較低的項目在未來也會繼續(xù)被較少地使用,因此將使用次數(shù)較少的項目替換出去。

        LFU 算法會記錄每個數(shù)據(jù)的訪問次數(shù)。當一個數(shù)據(jù)被再次訪問時,就會增加該數(shù)據(jù)的訪問次數(shù)。這樣就解決了偶爾被訪問一次之后,數(shù)據(jù)留存在緩存中很長一段時間的問題,相比于 LRU 算法也更合理一些。

簡單來說就是淘汰用的最少的數(shù)據(jù)或項目。

Redis 是如何實現(xiàn) LFU 算法的?

LFU 算法相比于 LRU 算法的實現(xiàn),多記錄了「數(shù)據(jù)的訪問頻次」的信息。Redis 對象的結(jié)構如下:

typedef struct redisObject {
    ...
      
    // 24 bits,用于記錄對象的訪問信息
    unsigned lru:24;  
    ...
} robj;

Redis 對象頭中的 lru 字段,在 LRU 算法下和 LFU 算法下使用方式并不相同。

在 LRU 算法中,Redis 對象頭的 24 bits 的 lru 字段是用來記錄 key 的訪問時間戳,因此在 LRU 模式下,Redis可以根據(jù)對象頭中的 lru 字段記錄的值,來比較最后一次 key 的訪問時間長,從而淘汰最久未被使用的 key。

在 LFU 算法中,Redis對象頭的 24 bits 的 lru 字段被分成兩段來存儲,高 16bit 存儲 ldt(Last Decrement Time),用來記錄 key 的訪問時間戳;低 8bit 存儲 logc(Logistic Counter),用來記錄 key 的訪問頻次。

到此這篇關于Redis中LRU算法和LFU算法的區(qū)別小結(jié)的文章就介紹到這了,更多相關Redis LRU算法和LFU算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Redis數(shù)據(jù)結(jié)構類型示例解析

    Redis數(shù)據(jù)結(jié)構類型示例解析

    這篇文章主要為大家介紹了Redis數(shù)據(jù)結(jié)構類型示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 如何基于Session實現(xiàn)短信登錄功能

    如何基于Session實現(xiàn)短信登錄功能

    對比起Cookie,Session是存儲在服務器端的會話,相對安全,并且不像Cookie那樣有存儲長度限制,下面這篇文章主要給大家介紹了關于如何基于Session實現(xiàn)短信登錄功能的相關資料,需要的朋友可以參考下
    2022-10-10
  • 淺談我是如何用redis做實時訂閱推送的

    淺談我是如何用redis做實時訂閱推送的

    這篇文章主要介紹了淺談我是如何用redis做實時訂閱推送的,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • ELK配置轉(zhuǎn)存redis緩存采集nginx訪問日志的操作方法

    ELK配置轉(zhuǎn)存redis緩存采集nginx訪問日志的操作方法

    本文介紹了在服務器上部署MySQL及如何啟動MySQL服務,并詳細說明了如何查找安裝軟件的日志文件位置,通過使用rpm命令查詢MySQL服務的日志文件位置,以及通過編輯Logstash配置文件來添加MySQL日志信息,感興趣的朋友一起看看吧
    2024-11-11
  • 基于Redis實現(xiàn)共享Session登錄的實現(xiàn)

    基于Redis實現(xiàn)共享Session登錄的實現(xiàn)

    本文主要介紹了基于Redis實現(xiàn)共享Session登錄的實現(xiàn),包括發(fā)送短信驗證碼、短信驗證碼登錄和注冊、以及登錄狀態(tài)校驗的流程,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • 一文詳解如何使用Redis實現(xiàn)分布式鎖

    一文詳解如何使用Redis實現(xiàn)分布式鎖

    這篇文章主要介紹了一文詳解如何使用Redis實現(xiàn)分布式鎖,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Windows下redis下載、redis安裝及使用教程

    Windows下redis下載、redis安裝及使用教程

    redis 提供了多種數(shù)據(jù)類型來支持不同的業(yè)務場景,所以經(jīng)常使用在分布式鎖中,今天給大家講解redis安裝及使用教程,感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • Redis批量刪除指定前綴的Key兩種方法

    Redis批量刪除指定前綴的Key兩種方法

    redis作為緩存服務器在項目中經(jīng)常使用,使用redis存儲數(shù)據(jù)時,我們經(jīng)常會將key分組,這篇文章主要給大家介紹了關于Redis批量刪除指定前綴的Key兩種方法,需要的朋友可以參考下
    2024-01-01
  • 使用Redis實現(xiàn)分布式鎖與緩存策略方式

    使用Redis實現(xiàn)分布式鎖與緩存策略方式

    文章介紹了Redis在分布式系統(tǒng)中實現(xiàn)分布式鎖和緩存策略的優(yōu)勢,并詳細闡述了SETNX+EXPIRE、使用Lua腳本、SETEXPXNX命令和Redisson框架等幾種常見的分布式鎖實現(xiàn)方案,同時,文章還探討了旁路緩存、緩存穿透、緩存雪崩和緩存擊穿等幾種緩存策略
    2025-11-11
  • Redis集群刪除后重建后報錯:unrecoverable erro:corrupted cluster config file問題及解決

    Redis集群刪除后重建后報錯:unrecoverable erro:corrupted clust

    這篇文章主要介紹了Redis集群刪除后重建后報錯:unrecoverable erro:corrupted cluster config file問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2026-06-06

最新評論

临湘市| 田东县| 从江县| 麦盖提县| 南昌市| 日土县| 枞阳县| 临沧市| 许昌县| 东丽区| 竹山县| 怀来县| 伊春市| 莲花县| 吉林省| 奉新县| 无极县| 慈利县| 浦北县| 德阳市| 东乌| 通州区| 乌海市| 闻喜县| 招远市| 毕节市| 马山县| 兰考县| 大田县| 通化县| 壶关县| 谢通门县| 彝良县| 英德市| 湖北省| 遂川县| 辽阳市| 伽师县| 甘泉县| 临沭县| 额济纳旗|