大廠面試官問我:Redis內存淘汰,LRU維護整個隊列嗎?【后端八股文四:Redis內存淘汰策略八股文合集】

?往期內容:

大廠面試官問我:Redis處理點贊,如果瞬時涌入大量用戶點贊(千萬級),應當如何進行處理?【后端八股文一:Redis點贊八股文合集】-CSDN博客

大廠面試官問我:布隆過濾器有不能擴容和刪除的缺陷,有沒有可以替代的數據結構呢?【后端八股文二:布隆過濾器八股文合集】-CSDN博客

大廠面試官問我:Redis持久化RDB有沒有可能阻塞?阻塞點在哪里?【后端八股文三:Redis持久化八股文合集】-CSDN博客

本文為【Redis內存淘汰策略八股文合集】初版,后續還會進行優化更新,歡迎大家關注點贊評論交流~

大家第一眼看到這個標題,不知道心中是否有答案了?在面試當中,面試官經常對項目亮點進行深挖,來考察你對這個項目亮點的理解以及思考!這個時候,你如果可以回答出面試官的問題,甚至是主動說出自己的思考,那在面試中是大大加分的~

內存淘汰策略

(新寫報錯,最近最少使用,隨機,過期最近最少使用,過期隨機,過期更早)
指的是Redis的用于緩存的內存不足時,怎么處理需要新寫入且需要申請額外空間的數據

noeviction:新寫入報錯

allkeys-lru:在鍵空間中,移除最近最少使用的 key。

allkeys-random:在鍵空間中,隨機移除某個key。

volatile-lru:在設置了過期時間的鍵空間中,移除最近最少使用的 key。

volatile-random:在設置了過期時間的鍵空間中,隨機移除某個 key。

volatile-ttl:在設置了過期時間的鍵空間中,有更早過期時間的 key 優先移除。

Redis數據淘汰策略,最常用的是哪個?默認是哪個?

Redis中最常用的淘汰策略是LRU(Least Recently Used)。這也是Redis的默認淘汰策略。

有了刪除策略為什么還需要有淘汰策略

因為刪除策略的惰性策略是用到才比較是否過期,而定時策略是選一批執行刪除。所以還有很多的數據是被漏掉的。

/

刪除策略和淘汰策略都是為了解決Redis數據超出內存限制的問題。刪除策略是在訪問數據時才進行過期檢查,比較被動。而淘汰策略是主動選擇要淘汰的數據,更加主動和有計劃。

Redis單線程怎么去淘汰Key的呢?

  • Redis雖然是單線程的,但是它會定期(每100ms)主動掃描一批Key,檢查是否過期。
  • 對于過期的Key,Redis會立即將其刪除。
  • 同時,在執行其他命令時,如果遇到過期的Key,也會立即將其刪除。
  • 這樣可以保證過期數據能夠及時被清理。

Redis的超時淘汰了解過嗎,數據結構是怎么實現的?

  • Redis使用一個過期字典(expire dictionary)來存儲每個Key的過期時間戳。
  • 當訪問一個Key時,會檢查其是否過期,如果過期則立即刪除。
  • 同時Redis會定期(每100ms)對過期字典進行掃描,刪除已經過期的Key。
  • 這個過期字典采用惰性刪除的方式,即在訪問時檢查過期,減輕了Redis的CPU負擔。

Redis中的內存淘汰策略中volatile-lru和allkeys-lru有什么區別?

  • volatile-lru: 在設置了過期時間的key中,淘汰最近最少使用的key。
  • allkeys-lru: 在所有的key中,淘汰最近最少使用的key。

場景題:使用Redis淘汰策略為什么要給熱門視頻設置遞增的TTL,有沒有考慮過熱門視頻變的不那么熱門了,但是零星有幾個用戶訪問,此時該視頻的生存時間又很長,很難被Redis淘汰,這個問題如何解決?

對于熱門視頻設置遞增的TTL確實能讓它們在一定時間內不被淘汰。但當熱度下降后,這些視頻可能會一直存在,難以被淘汰。可以考慮結合LRU策略,在過期前一段時間內將視頻的TTL重置,或者使用volatile-lru策略來淘汰它們。

Redis如何設計LRU? / Redis內存淘汰, LRU維護整個隊列嗎?

  • Redis使用一個雙向鏈表來維護LRU隊列。每個Key都對應一個節點,節點包含該Key的訪問時間戳。
  • 當訪問一個Key時,會將其移動到鏈表頭部,表示最近訪問。
  • 當需要淘汰時,會從鏈表尾部(最久未訪問)刪除節點對應的Key。
  • 這樣可以在O(1)時間內完成Key的訪問和淘汰操作。

Redis如何設計LFU?

  • Redis使用一個字典來維護每個Key的訪問頻率Counter。
  • 當訪問一個Key時,會增加其Counter值。
  • 當需要淘汰時,會從Counter值最小的Key開始淘汰。
  • 為了防止Counter無限增大,Redis會定期對所有Key的Counter進行衰減。

Redis為什么要使用LRU作為淘汰方式,不使用LFU呢?

(底層實現簡單)

Redis使用LRU而不是LFU主要是因為LRU更簡單高效,而且能較好地反映用戶的訪問模式。LFU需要維護一個頻率統計,計算復雜度高,適合于某些特殊場景。

Redis怎么配置內存淘汰策略?

比如:配置文件中的maxmemory-policy的鍵中選

maxmemory-policy allkeys-lru

??---------------------------------------------------------------------------------------------------------------

后期新的八股文合集文章會僅粉絲可見,感興趣的小伙伴可以點個關注~

?更多精彩內容以及一手消息請關注公眾號:絕命Coding

公眾號私信回復“免費資料”可免費獲取簡歷模板以及技術亮點合集等免費資料

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/35506.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/35506.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/35506.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

精選:15款頂尖Python知識圖譜(關系網絡)繪制工具,數據分析的強力助手

知識圖譜(關系網絡)可以用簡單的形狀和線條顯示復雜的系統,幫助我們理解數據之間的聯系。我們今天將介紹15個很好用的免費工具,可以幫助我們繪制網絡圖。 NetworkX NetworkX是一個用于處理網絡的Python工具。許多人在Python中處…

模型選擇、過擬合與欠擬合

一、訓練誤差與泛華誤差 1、在訓練時,我們關心的是泛化誤差,也就是對新數據的預測 2、訓練誤差:模型在訓練數據上的誤差;泛化誤差:模型在新數據上的誤差 二、驗證數據集與測試數據集 1、驗證數據集:用于…

Percona Toolkit 神器全攻略(配置類)

Percona Toolkit 神器全攻略(配置類) Percona Toolkit 神器全攻略系列共八篇,前文回顧: 前文回顧Percona Toolkit 神器全攻略Percona Toolkit 神器全攻略(實用類) 全文約定:$為命令提示符、gr…

Spring Boot集成jsoup實現html解析

1.什么是jsoup jsoup 是一款 Java 的 HTML 解析器,可直接解析某個 URL 地址、HTML 文本內容。它提供了一套非常省力的 API,可通過 DOM,CSS 以及類似于 jQuery 的操作方法來取出和操作數據,可操作 HTML 元素、屬性、文本。 JSo…

函數內部結構分層淺析(從MVC分層架構聯想)

函數內部結構分層淺析(從MVC分層架構聯想) 分層架構:一種將軟件代碼按不同功能進行劃分的架構模式。 優點包括: 可維護性:各層職責明確,易于單獨修改維護。 可擴展性:方便添加或修改某一層,不…

優化Java應用的日志記錄方法

優化Java應用的日志記錄方法 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 引言 在開發和維護Java應用程序時,良好的日志記錄是確保應用穩定性和…

優化Java中網絡通信的性能策略

優化Java中網絡通信的性能策略 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 在現代軟件開發中,優化網絡通信的性能是確保應用程序高效運行的關鍵…

Rocketmq在單節點情況下新增從節點

Rocketmq在單節點情況下新增從節點 在docker-compose部署rocketmq單節點的基礎上,新增一個從節點 一,修改docker-compose配置文件 原docker-compose文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:server-4.5.2container_name: rm…

選擇診所管理系統的原則是什么?

如今,診所管理系統已成為醫療機構提升管理效率、優化患者服務的重要工具。然而,市場上的診所管理系統琳瑯滿目,功能各異,因此,如何選擇一款適合自己診所的管理系統,是許多診所管理者需要思考的問題。下面&a…

進程調度的基本過程

文章目錄 CPU執行指令過程進程PCB“分時復用” ??結語 CPU執行指令過程 一個CPU能執行那些指令,可以認為是cpu最初設計的時候就已經寫死了。有一個“表格”描述了都有哪些指令。 以上的表格只是一個簡化版本,真實的cpu指令表要復雜很多。此處假設每個…

RUC2024《綜合設計》期中測試

T1 原題鏈接https://www.luogu.com.cn/problem/P1025 不是我出的 T2 原題鏈接:https://www.luogu.com.cn/problem/P26787 這道題就是講過的二分貪心,先二分規定每兩個點之間都必須大于等于某個值,然后依次枚舉通過貪心求出最少需要刪除的點數…

薄冰英語語法學習--名詞2-格

名詞后面 s,代表后面這個東西屬于前面的。 比如toms book,湯姆的書。 末尾是s,那么直接在最后加就行了。比如boys,男孩們的 表示幾個詞共同 的所有關系在最后一個詞的詞尾加 sMary and Toms books 瑪麗和湯姆共有的書表示幾個詞…

深入探討C++的高級反射機制

反射是一種編程語言能力,允許程序在運行時查詢和操縱對象的類型信息。它廣泛應用于對象序列化、遠程過程調用、測試框架、和依賴注入等場景。 由于C語言本身的反射能力比較弱,因此C生態種出現了許多有趣的反射庫和實現思路。我們在本文一起探討其中的奧秘…

DOM遍歷

DOM 遍歷是指在 HTML 文檔中導航和定位元素的過程。通過 DOM 遍歷,您可以在文檔中移動并查找特定的元素,以便對其進行操作或者檢索信息。 尋找子元素 //DOM遍歷 const h1 document.querySelector(h1);//尋找子元素 console.log(h1.querySelectorAll(.…

每天一個數據分析題(三百九十)- 多元線性回歸

在多元線性回歸中,下列哪項可以緩解多重共線性問題? A. 取對數 B. 平方 C. 去除異常值 D. 逐步回歸 數據分析認證考試介紹:點擊進入 題目來源于CDA模擬題庫 點擊此處獲取答案 數據分析專項練習題庫 內容涵蓋Python,SQL&am…

從入門到精通:使用Python的Watchdog庫監控文件系統的全面指南

從入門到精通:使用Python的Watchdog庫監控文件系統的全面指南 引言Watchdog庫概述核心組件工作原理 快速開始:設置Watchdog安裝Watchdog創建一個簡單的監控腳本設置和啟動Observer 事件處理:如何響應文件系統的變化基本事件處理處理復雜的場景…

論文生成新紀元:探索頂尖AI寫作工具的高效秘訣

在學術探索的征途中,AI論文工具本應是助力前行的風帆,而非讓人陷入困境的漩渦。我完全理解大家在面對論文壓力的同時,遭遇不靠譜AI工具的沮喪與無奈。畢竟,時間可以被浪費,但金錢和信任卻不可輕棄。 作為一名資深的AI…

@Transactional(rollbackFor = Exception.class)注解

當作用于類上時,該類的所有 public 方法將都具有該類型的事務屬性,同時,我們也可以在方法級別使用該標注來覆蓋類級別的定義。 在項目中,Transactional(rollbackForException.class),如果類加了這個注解,那…

Java使用Graphics2D畫圖,畫圓,矩形,透明度等實現

背景 如上圖,需要使用Java生成一個圖片, 并以base64編碼的形式返回給前端展示。 使用Graphics2D類,來進行畫圖,其中需要畫方框、原型、插入圖標、寫入文字等,同時需要設置透明度等細節點 環境:Jdk17&#…

Java面試八股之JVM內存泄漏按照發生的方式可以分為哪幾類

JVM內存泄漏按照發生的方式可以分為哪幾類 常發性內存泄漏(Frequent Memory Leak) 這類內存泄漏發生的代碼會被頻繁執行,每次執行時都會導致一塊或多塊內存無法被回收。由于泄漏行為重復發生,故稱為常發性。這類泄漏通常比較容易…