最新国产好看的视频,伊人天堂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)先級。當(dāng)緩存空間已滿,而需要插入新項目時,LRU策略會替換最近最少使用的項目。這種策略假設(shè)最近被訪問的項目更有可能在近期再次使用,因此將較長時間沒有被使用的項目替換出去。

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

LRU的實現(xiàn)

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

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

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

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

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

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

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

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

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

二、LFU

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

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

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

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

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

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 的訪問頻次。

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

相關(guān)文章

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

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

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

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

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

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

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

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

    本文介紹了在服務(wù)器上部署MySQL及如何啟動MySQL服務(wù),并詳細(xì)說明了如何查找安裝軟件的日志文件位置,通過使用rpm命令查詢MySQL服務(wù)的日志文件位置,以及通過編輯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)分布式鎖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Windows下redis下載、redis安裝及使用教程

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

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

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

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

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

    文章介紹了Redis在分布式系統(tǒng)中實現(xiàn)分布式鎖和緩存策略的優(yōu)勢,并詳細(xì)闡述了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

最新評論

神池县| 资兴市| 安塞县| 弋阳县| 普兰店市| 涟水县| 武定县| 商水县| 文成县| 白朗县| 清苑县| 伊宁县| 周至县| 双鸭山市| 叙永县| 观塘区| 新泰市| 虹口区| 龙川县| 洛扎县| 沧源| 绥江县| 铜陵市| 肥西县| 铜山县| 南汇区| 安远县| 襄城县| 吴旗县| 九龙坡区| 岗巴县| 涟源市| 文登市| 萍乡市| 磴口县| 中西区| 苍溪县| 泗水县| 岢岚县| 凤庆县| 全南县|