Redis ssd是什么?Redis 內存空間優化的點都有哪些?embstr 和 row、intset、ziplist分別是什么?

Redis SSD 是什么?

Redis SSD 通常指 Redis 使用 SSD(固態硬盤)作為持久化存儲介質的場景。雖然 Redis 是內存數據庫(數據主要駐留內存),但其持久化機制(如 RDB 快照和 AOF 日志)需要將數據寫入磁盤。使用 SSD 可以顯著提升持久化文件的讀寫速度,尤其在以下場景:

  • 快速恢復:重啟時從 RDB/AOF 恢復數據到內存的速度更快。
  • 高吞吐寫入:處理大量 AOF 日志寫入時,SSD 的 IOPS 能力優于 HDD。
  • 混合存儲方案:某些擴展方案(如 Redis on Flash)將冷數據存于 SSD,熱數據存于內存,但需第三方支持。

Redis 內存優化關鍵點

1. 選擇高效的數據結構
  • 避免大 Key:單個 Key 的 Value 過大會增加內存和網絡開銷。
  • 使用 Hash 替代多個 String:存儲對象屬性時,Hash 的 ziplist 編碼比多個 String 更省內存。
  • HyperLogLog:基數統計(如 UV)時,HyperLogLog 僅需 12KB,誤差率 <1%。
  • Bitmap:布爾值場景(如用戶簽到),Bitmap 極度壓縮存儲。
2. 利用編碼優化

Redis 根據數據特征動態選擇編碼方式,通過配置參數優化:

  • ziplist:列表、哈希、有序集合在元素較少時使用壓縮列表。
  • intset:整數集合用于全為整數的集合。
  • quicklist:列表的底層結構(結合 ziplist 和鏈表)。

配置示例

hash-max-ziplist-entries 512  # Hash 元素數 ≤512 時用 ziplist
hash-max-ziplist-value 64     # Hash 的每個字段值長度 ≤64 字節
set-max-intset-entries 512    # Set 元素數 ≤512 且全為整數時用 intset
3. 控制過期時間與淘汰策略
  • 設置 TTL:自動清理過期數據,避免內存泄漏。
  • 選擇淘汰策略:如 volatile-lruallkeys-lfu,根據業務特點配置。
4. 內存碎片管理
  • 啟用 Jemalloc:Redis 默認的內存分配器,減少碎片。
  • 監控碎片率:通過 INFO memory 查看 mem_fragmentation_ratio,過高時重啟或使用 MEMORY PURGE(需支持)。
5. 共享對象池
  • 小整數復用:Redis 默認緩存 0~9999 的整數,直接復用對象。

embstr、raw、intset、ziplist 詳解

1. embstr 與 raw
  • embstr(embedded string)

    • 適用場景:字符串長度 ≤44 字節(Redis 5.0+)。
    • 內存布局:RedisObject 和 SDS(簡單動態字符串)在連續內存中分配,減少內存碎片和指針開銷。
    • 優點:一次內存分配,CPU 緩存友好。
  • raw

    • 適用場景:字符串長度 >44 字節。
    • 內存布局:RedisObject 和 SDS 分兩次分配,內存不連續。

示例

SET key1 "short"      # embstr 編碼(長度 5)
SET key2 "a_very_long_string_..."  # raw 編碼(長度 >44)
2. intset(整數集合)
  • 適用場景:Set 集合元素全為整數且元素數 ≤ set-max-intset-entries(默認 512)。
  • 結構:連續內存存儲有序整數數組,支持 int16/int32/int64 動態升級。
  • 優點:無哈希表開銷,內存緊湊。

示例

SADD numbers 1 2 3    # intset 編碼
SADD numbers "hello"  # 編碼變為 hashtable
3. ziplist(壓縮列表)
  • 適用場景:List、Hash、ZSet 在元素較少且值較小時使用。
  • 結構:連續內存塊,通過長度字段和特殊編碼壓縮數據,無指針開銷。
  • 優點:內存高效,但修改操作時間復雜度高(需重新分配內存)。

配置參數

list-max-ziplist-size -2        # Quicklist 中每個 ziplist 節點大小
zset-max-ziplist-entries 128    # ZSet 元素數 ≤128 時用 ziplist
zset-max-ziplist-value 64       # ZSet 元素值長度 ≤64 字節

溢出頁管理與數據存儲格式

行溢出(Row Overflow)
  • 問題:當 Redis 的 Key 或 Value 過大時,內存碎片可能增加,但 Redis 無傳統數據庫的行溢出機制(因數據全在內存)。
  • 優化:通過分片(如 Hash 分桶)或壓縮大 Value(如 gzip)。
數據存儲格式
  • RedisObject:所有 Redis 數據統一封裝為 redisObject,包含類型(string/hash 等)、編碼(embstr/ziplist 等)和指針。
  • SDS(簡單動態字符串):動態擴展的字符串結構,支持二進制安全與高效追加操作。

總結

技術點核心作用優化場景
SSD 持久化加速 RDB/AOF 的讀寫快速恢復、高吞吐寫入
embstr短字符串內存優化存儲小文本(如 Session ID)
intset整數集合內存壓縮存儲 IP 黑白名單
ziplist小規模列表/哈希/有序集合的壓縮存儲存儲對象屬性、小型排行榜
內存碎片管理減少無效內存占用長期運行的高頻寫入場景

通過合理選擇數據結構、調整編碼參數及利用 Redis 特性,可顯著降低內存占用并提升性能。

在這里插入圖片描述

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

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

相關文章

【藍橋杯】 數字詩意

數字詩意 在詩人的眼中&#xff0c;數字是生活的韻律&#xff0c;也是詩意的表達。 小藍&#xff0c;當代頂級詩人與數學家&#xff0c;被賦予了”數學詩人”的美譽。他擅長將冰冷的數字與抽象的詩意相融合&#xff0c;并用優雅的文字將數學之美展現于紙上。 某日&#xff0…

DHCP 服務器運行流程圖

以常見的 DHCP v4 為例,其完整流程如下: 一、客戶端請求 IP 地址階段 DHCPDiscover:客戶端啟動后,會以廣播的形式發送 DHCPDiscover 報文,目的是在網絡中尋找可用的 DHCP 服務器。該報文中包含客戶端的 MAC 地址等信息,以便服務器能夠識別客戶端。DHCPOffer:網絡中的 D…

一種企業信息查詢系統設計和實現:xujian.tech/cs

一種企業信息查詢系統設計和實現&#xff1a;xujian.tech/cs 背景與定位 企業在對外合作、風控審查或市場調研時&#xff0c;常需快速獲取公開的工商信息。本文介紹一個企業信息搜索引擎&#xff0c;面向普通用戶與開發者&#xff0c;幫助快速定位企業名稱、統一社會信用代碼…

前端面試高頻算法

前端面試高頻算法 1 排序算法&#xff1b;1.1 如何分析一個排序算法1.1.1 執行效率3.1.2 內存消耗1.1.3 穩定性 1.2 冒泡排序&#xff08;Bubble Sort&#xff09;1.3 插入排序&#xff08;Insertion Sort&#xff09;1.4 選擇排序&#xff08;Selection Sort&#xff09;1.5 歸…

C++初階-模板初階

目錄 1.泛型編程 2.函數模板 2.1函數模板概念 2.2實現函數模板 2.3模板的原理 2.4函數模板的實例化 2.4.1隱式實例化 2.4.2顯式初始化 2.5模板參數的匹配原則 3.類模板 3.1類模板定義格式 3.2類模板的實例化 4.總結 1.泛型編程 對廣泛的類型法寫代碼&#xff0c;我…

「Mac暢玩AIGC與多模態02」部署篇01 - 在 Mac 上部署 Ollama + Open WebUI

一、概述 本篇介紹如何在 macOS 環境下本地部署 Ollama 推理服務,并通過 Open WebUI 實現可視化交互界面。該流程無需 CUDA 或專用驅動,適用于 M 系列或 Intel 芯片的 Mac,便于快速測試本地大語言模型能力。 二、部署流程 1. 環境準備 安裝 Homebrew(如尚未安裝):/bin…

JavaScript 中 undefined 和 not defined 的區別

在 JavaScript 的調試過程中&#xff0c;你是否經常看到 undefined 卻不知其來源&#xff1f;是否曾被 ReferenceError: xxx is not defined 的錯誤提示困擾&#xff1f;這兩個看似相似的概念&#xff0c;實際上是 JavaScript 類型系統中最重要的分水嶺。本文將帶你撥開迷霧&am…

django admin AttributeError: ‘UserResorce‘ object has no attribute ‘ID‘

在 Django 中遇到 AttributeError: ‘UserResource’ object has no attribute ‘ID’ 這類錯誤通常是因為你在代碼中嘗試訪問一個不存在的屬性。在你的例子中&#xff0c;錯誤提示表明 UserResource 類中沒有名為 ID 的屬性。這可能是由以下幾個原因造成的&#xff1a; 拼寫錯…

對鴻蒙 Next 系統“成熟論”的深度剖析-優雅草卓伊凡

對鴻蒙 Next 系統“成熟論”的深度剖析-優雅草卓伊凡 在科技飛速發展的當下&#xff0c;鴻蒙 Next 系統無疑成為了眾多科技愛好者與行業人士關注的焦點。今日&#xff0c;卓伊凡便收到這樣一個饒有趣味的問題&#xff1a;鴻蒙 Next 系統究竟需要多長時間才能完全成熟&#xff…

快速上手GO的net/http包,個人學習筆記

更多個人筆記&#xff1a;&#xff08;僅供參考&#xff0c;非盈利&#xff09; gitee&#xff1a; https://gitee.com/harryhack/it_note github&#xff1a; https://github.com/ZHLOVEYY/IT_note 針對GO中net/http包的學習筆記 基礎快速了解 創建簡單的GOHTTP服務 func …

AI-Browser適用于 ChatGPT、Gemini、Claude、DeepSeek、Grok的客戶端開源應用程序,集成了 Monaco 編輯器。

一、軟件介紹 文末提供程序和源碼下載學習 AI-Browser適用于 ChatGPT、Gemini、Claude、DeepSeek、Grok、Felo、Cody、JENOVA、Phind、Perplexity、Genspark 和 Google AI Studio 的客戶端應用程序&#xff0c;集成了 Monaco 編輯器。使用 Electron 構建的強大桌面應用程序&a…

Dify框架面試內容整理-Dify如何處理知識庫的集成?

Dify 在知識庫集成方面采用了“檢索增強生成(RAG)”的技術架構,核心實現思路如下: 一、知識庫集成的整體流程 Dify處理知識庫集成通常包括以下關鍵步驟: 文檔上傳↓

Laravel 模型使用全局作用域和局部作用域

一. 需要解決什么問題 最近Laravel 項目中遇到一個需求&#xff0c;我有一個客戶表&#xff0c;每個員工都有自己的客戶&#xff0c;但是自己只能看自己的客戶。 項目中&#xff0c;有很多功能需要查詢客戶列表&#xff0c;客戶詳情&#xff0c;查詢客戶入口很多&#xff0c;…

【Nova UI】十二、打造組件庫之按鈕組件(上):邁向功能構建的關鍵一步

序言 在上一篇文章中&#xff0c;我們深入探索了 icon 組件從測試到全局注冊的全過程&#x1f3af;&#xff0c;成功為其在項目中穩定運行筑牢了根基。此刻&#xff0c;組件庫的建設之旅仍在繼續&#xff0c;我們將目光聚焦于另一個關鍵組件 —— 按鈕組件。按鈕作為用戶與界面…

鴻蒙OSS文件(視頻/圖片)壓縮上傳組件-能夠增刪改查

一、鴻蒙實現處理-壓縮上傳整體代碼處理邏輯 轉沙箱壓縮獲取憑證并上傳文件 文件準備&#xff08;拿到文件流&#xff09;獲取上傳憑證&#xff08;調接口1拿到file_name和upload_url&#xff09;執行文件上傳&#xff08;向階段2拿到的upload_url上傳文件&#xff09;更新列表…

河道流量監測,雷達流量計賦能水安全智慧守護

在蜿蜒的河道之上&#xff0c;水流的脈搏始終與人類文明的興衰緊密相連。從農田灌溉的水量調配到城市防洪的精準預警&#xff0c;從生態保護的水質溯源到水資源管理的決策&#xff0c;河道流量監測如同大地的 “血管檢測”&#xff0c;是守護水安全的第一道防線。傳統監測手段在…

CSS3 基礎(邊框效果)

一、邊框效果 屬性功能示例值說明border-radius創建圓角border-radius: 20px;設置元素的圓角半徑&#xff0c;支持像素&#xff08;px&#xff09;或百分比&#xff08;%&#xff09;。值為 50% 時可變為圓形。box-shadow添加陰影box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.5)…

零基礎小白如何上岸數模國獎

零基礎小白如何上岸數模國獎 我自己本人第一次參加數模國賽順利上岸國獎&#xff0c;當然那段經歷也是比較痛苦了&#xff0c;差不多也是從當年四月開始接觸數學建模&#xff0c;第一次參加媽媽杯成績并不理想&#xff0c;后面不斷參加數模比賽進行模擬&#xff0c;最后順利上岸…

SQL學習-常用函數

常見SQL函數使用 &#xff08;注意&#xff1a;不同的數據庫類型使用的語法不同&#xff09; 以下是MySQL和PostgreSQL在實現替換、抽取、拼接、分列四個常見字符串操作功能時的核心區別總結&#xff0c;按功能分類對比&#xff1a; 1. 替換&#xff08;Replace&#xff09; …

rt-linux下的cgroup cpu的死鎖bug

一、背景 rt-linux系統有其非常大的實時性的優勢&#xff0c;但是與之俱來的是該系統上有一些天然的缺陷。由于rt-linux系統允許進程在內核態執行的邏輯里&#xff0c;在持鎖期間&#xff0c;甚至持spinlock鎖期間&#xff0c;都能被其他進程搶占。這一特性能帶來實時性的好處…