Redis-內存管理

? ? ? Redis是基于內存存儲的,非關系型,鍵值對數據庫。因此,對Redis來說,內存空間的管理至關重要。那Redis是如何內存管理的呢?

一、最大內存限制

? ? ?Redis 提供了 maxmemory?參數允許用戶設置 Redis 可以使用的最大內存大小。當 Redis 使用的內存量達到 maxmemory?設置的上限時,Redis 會根據配置的淘汰策略(如 LRU、LFU、TTL 等)自動刪除某些鍵值對以釋放內存。

二、過期鍵刪除策略

? ? ?用戶可以為鍵設置過期時間,當鍵過期后,Redis 采用多種方式處理:
? ? ?1、定期刪除:Redis 會周期性地隨機檢查并刪除一部分已過期的鍵。
? ? ?2、惰性刪除:在訪問某個鍵時,如果發現該鍵已過期,則立即刪除它。
? ? ?3、主動淘汰:結合上述兩種方法,在內存不足時按照特定策略主動淘汰未過期的鍵。

三、內存分配與回收

? ? ?Redis 使用jemalloc或libc等高效的內存分配器進行內部數據結構(如字符串、哈希表、鏈表、集合等)的內存分配與回收,減少內存碎片

四、結合數據結構和編碼方式做內存優化

? ? ?Redis 的內部數據結構經過特殊設計,能夠緊湊存儲不同類型的數據,例如簡單動態字符串SDS、壓縮列表ziplist等。
? ? ?Redis 還支持多種編碼方式,針對不同場景下的數據量和訪問模式選擇最節省空間的編碼方式,如哈希表的ziplist編碼和hashtable編碼切換。


五、內存淘汰策略

? ? ?當達到內存上限且有新數據需要插入時,Redis 會按照預設的淘汰策略從數據集中選擇合適的鍵刪除,常見的淘汰策略包括:
? ? ? noeviction:不刪除任何數據,返回錯誤給客戶端(當內存達到 maxmemory 時不再執行寫操作)。
? ? ?volatile-lru/volatile-ttl/allkeys-lru/allkeys-random/allkeys-lfu:基于 LRU(最近最少使用)、TTL(過期時間)、LFU(最不經常使用)或隨機選擇鍵進行刪除。

? ? ?在java中,我們了解過jvm的垃圾回收機制對未被引用的對象進行回收的過程。那在Redis中,是如何被回收呢?

答:在 Redis 中,內存管理采用了引用計數(Reference Counting)的方式來跟蹤對象的生命周期。這意味著每個 Redis 對象都有一個引用計數器,當有新的引用指向該對象時,引用計數加1;當引用移除時,引用計數減1。

? ? ? 當一個 Redis 對象的引用計數變為0時,表示沒有任何其他對象引用它,此時 Redis 會立即釋放這個對象所占用的內存空間。因此,Redis 的內存回收是實時且確定性的,不需要像Java那樣等待垃圾收集器不定時地進行掃描和清理無用對象的過程。

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

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

相關文章

js設計模式:依賴注入模式

作用: 在對象外部完成兩個對象的注入綁定等操作 這樣可以將代碼解耦,方便維護和擴展 vue中使用use注冊其他插件就是在外部創建依賴關系的 示例: class App{constructor(appName,appFun){this.appName appNamethis.appFun appFun}}class Phone{constructor(app) {this.nam…

Elastic Search:構建語義搜索體驗

當你逐步熟悉 Elastic 時,你將使用 Elasticsearch Relevance Engine? (ESRE),該引擎旨在為 AI 搜索應用程序提供支持。 借助 ESRE,你可以利用一套開發人員工具,包括 Elastic 的文本搜索、向量數據庫和我們用于語義搜索的專有轉換…

ngnix網站服務詳解

一 Nginx的簡介 1 Nginx: ①Nginx 是開源、高性能、高可靠的 Web 和反向代理服務器,而且支持熱部署,幾乎可以做到 7 * 24 小時不間斷運行,即使運行幾個月也不需要重新啟動,還能在不間斷服務的情況下對軟件版本進行熱…

2月22日作業,按鍵中斷LED燈控制

1.使用GPIO子系統&#xff0c;編寫LED驅動&#xff0c;應用程序測試 mychrdev.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include <linux/of.h> …

微軟Azure OpenAI的 GPT 接口使用小結

直接使用OpenAI的 GPT服務&#xff0c;在國內環境使用上會一些相關問題&#xff0c;微軟提供了OpenAI的服務&#xff0c;基本上可以滿足的相關的需要。下面提供一些簡單的使用操作&#xff0c;來讓你快速使用到 GPT 的服務。 前提&#xff1a;注冊Azure的賬戶&#xff0c;并綁…

OpenCV中的normalize函數以及NORM_MINMAX、NORM_INF、NORM_L1、NORM_L2具體應用介紹

在OpenCV中&#xff0c;normalize函數用于將圖像或矩陣的值規范化到一個特定的范圍內。這在圖像處理中非常有用&#xff0c;比如在調整圖像的對比度、準備數據進行機器學習處理時。規范化可以提高不同圖像之間的可比性&#xff0c;或是為了滿足特定算法對數據范圍的要求。 nor…

數的反碼和補碼表示

2.反碼 反碼的表示方法是: 正數的反碼是其本身負數的反碼是在其原碼的基礎上,符號位不變&#xff0c;其余各個位取反 [1][000000011原[000000011反[-1][10000001]原[11111110]反 3.補碼 補碼的表示方法是: 正數的補碼就是其本身 負數的補碼是在其原碼的基礎上,符號位不變,其余各…

36、IO進程線程/進程和線程之間的通信練習

一、使用有名管道完成兩個進程的相互通信(提示&#xff1a;可以使用多進程或多線程完成)。 代碼1&#xff1a;創建兩個有名管道文件 #include<myhead.h>int main(int argc, const char *argv[]) {if(mkfifo("./mingtohua",0664)-1)//創建小明向小華發信息的管…

Stable Diffusion 繪畫入門教程(webui)-ControlNet(深度Depth)

上篇文章介紹了線稿約束&#xff0c;這篇文章介紹下深度Depth 文章目錄 一、選大模型二、寫提示詞三、基礎參數設置四、啟用ControlNet 顧名思義&#xff0c;就是把原圖預處理為深度圖&#xff0c;而深度圖可以區分出圖像中各元素的遠近關系&#xff0c;那么啥事深度圖&#xf…

c/c++ | 字符串函數總結 | 為什么總喜歡糾結sizeof 和strlen 呢?

其實時間長了&#xff0c;稍微研究后&#xff0c;再來品味&#xff0c;別有一番滋味 總是看著混亂&#xff0c;但是靜下來看&#xff0c;還是能琢磨透的&#xff0c;只是看著復雜&#xff0c;本質是兩套風格&#xff0c;然后又要有交集&#xff0c;所以就看起來復雜 // 首先字符…

目標管理SMART原則

SMART原則是一種目標管理方法&#xff0c;它包括以下五個要素&#xff1a; 具體性&#xff08;Specific&#xff09;&#xff1a;目標應該是明確的&#xff0c;具體地說明要達成的行為標準。例如&#xff0c;一個目標可能描述為“減少客戶投訴率”&#xff0c;而不是“增強客戶…

本機防攻擊簡介

定義 在網絡中&#xff0c;存在著大量針對CPU&#xff08;Central Processing Unit&#xff09;的惡意攻擊報文以及需要正常上送CPU的各類報文。針對CPU的惡意攻擊報文會導致CPU長時間繁忙的處理攻擊報文&#xff0c;從而引發其他業務的中斷甚至系統的中斷&#xff1b;大量正常…

惠爾頓 網絡安全審計系統 任意文件讀取漏洞復現

0x01 產品簡介 惠爾頓網絡安全審計產品致力于滿足軍工四證、軍工保密室建設、國家涉密網絡建設的審計要求&#xff0c;規范網絡行為&#xff0c;滿足國家的規范&#xff1b;支持1-3線路的internet接入、1-3對網橋&#xff1b;含強大的上網行為管理、審計、監控模塊&#xff1b…

【2024軟件測試面試必會技能】Requests(5):Requests模塊_設置代理

設置代理 代理&#xff08;英語&#xff1a;Proxy&#xff09;&#xff0c;也稱網絡代理&#xff0c;是一種特殊的網絡服務&#xff0c;英文全稱是&#xff08;Proxy Server&#xff09;&#xff0c;其功 能就是代理網絡用戶去取得網絡信息。形象的說&#xff1a;它是網絡信息…

正向代理和反向代理釋義

代理 客戶端 代理 服務端 對客戶端而言&#xff0c;代理是服務端&#xff1b;對服務端而言&#xff0c;代理是客戶端。這個很好理解吧&#xff0c;以祖孫三代關系為例&#xff0c;爸爸在兒子面前是爸爸&#xff0c;爸爸在爺爺面前是兒子。 無論是正向代理還是反向代理&#…

Android14 InputManager-ANR原理

目標窗口查找時&#xff0c;作為派發目標的窗口必須已經準備好接收新的輸入事件&#xff0c;否則判定窗口處于未響應狀態&#xff0c;終止事件的派發過程&#xff0c;并在一段時間后再試。倘若5s后窗口仍然未準備好接收輸入事件&#xff0c;將導致ANR。直接引發ANR的原因有很多…

操作系統學習記錄

系統篇 內核 應用和底層硬件&#xff08;CPU、內存、硬盤等&#xff09;的連接橋梁。 用戶態和內核態 CPU和進程可以在兩種態下運行。 內核態可以直接訪問所有硬件資源&#xff0c;用戶態需要通過“系統調用”陷入到內核態才能否則只能訪問用戶空間地址的內存&#xff08;虛…

P8630 [藍橋杯 2015 國 B] 密文搜索

P8630 [藍橋杯 2015 國 B] 密文搜索 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn)https://www.luogu.com.cn/problem/P8630 題目分析 基本上是hash的板子&#xff0c;但實際上對于密碼串&#xff0c;只要判斷主串中任意連續的八個位置是否存在密碼串即可&#xff1b;那么我們…

PHP學習筆記1——html標簽以及頭部元素頁面布局

html是一種超文本標識符號&#xff0c;用來在網頁中指定顯示頁面格式顯示 基本格式 <!doctype html> <html><head><title></title> </head><body> </body></html> 包含聲明&#xff0c;框架html&#xff0c;頭部head&a…

怎么把公眾號文章鏈接做成二維碼?掃碼查看公眾號推文的方法

公眾號是現在給用戶分享內容的一種方式&#xff0c;通過輸出優質的公眾號文章內容來為關注者提供信息和內容。當我們發布公眾號文章后&#xff0c;有些情況下會需要將公眾號內容生成二維碼之后&#xff0c;印刷到傳單、展板上來顯示&#xff0c;那么如何將公眾號的文章鏈接轉二…