【Redis】Redis核心探秘:數據類型的編碼實現與高速訪問之道

📚?前言

🌟🌟🌟精彩導讀

本次我們將全面剖析Redis的核心技術要點,包括其豐富的數據類型體系、高效的編碼方式以及秒級響應的性能奧秘。對于渴望深入理解Redis底層機制的技術愛好者,這是一次難得的學習機會!

🔍 推薦擴展閱讀

想了解更多數據庫技術干貨?歡迎訪問小編的CSDN技術博客: 👉?GGBondlctrl-CSDN博客主頁?👈 (持續更新分布式系統、中間件等深度技術文章)

💖 讀者互動

您的每一個👍點贊、?收藏和??評論,都是我們持續輸出優質技術內容的強大動力!期待在評論區看到您的見解~

目錄

📚?前言

📚?1. 數據結構

📚?2.內部的編碼方式

🚀2.1String類型

🚀2.2hash類型

?🚀2.3list類型

🚀?2.4set類型

🚀2.5zset類型

📚?3.redis的工作過程

🚀3.1單線程模型

🚀3.2redis效率

📚?4.總結


📚?1. 數據結構

可以發現,這里的數據結構即我們之前學習的數據結構,但是redis在底層上實現上述的數據結構時候,會進行特定的優化,達到節省空間時間的效果;

所以在內部的具體的實現的數據結構(編碼方式)就會存在變化

在hash表中,redis在進行插入,查詢時間復雜度就是1,但是背后的實現不一定就是哈希表(使用別的數據結構實現),但是保證時間復雜度為O(1)

📚?2.內部的編碼方式

?具體的編碼方式如下圖所示:

數據結構內部編碼
??string??raw
int
embstr
??hash??hashtable
ziplist
??list??linkedlist
ziplist
??set??hashtable
intset
??zset??skiplist
ziplist

再附一張文本格式的表格;

此設計體現了 Redis ??空間與時間的平衡藝術??:通過編碼自動升級機制,在數據量增長時無縫切換數據結構,兼顧內存效率與操作性能。

🚀2.1String類型

這里涉及:raw,embstr,int

raw:最基本的字符串,長字符串的原始編碼,在大于39字節的字符串,使用raw

embstr:小于等于39字節的字符串,適用比較短的字符串,針對短字符進行的特殊的優化

int:8個字節的長整型,類似與java的long

?這里我們可以舉個例子:

set key 1
object encoding key

可以發現此時我們的value雖然是string類型,但是它的內部編碼的方式就是int

其他兩個編碼方式如下所示:

這里注意了,當我們的整數過長,那么編碼方式就會變成我們的raw的編碼格式

當我們的字符串長度不是很長的情況下,就是embstr的編碼方式~~~~

🚀2.2hash類型

這里涉及:hashtable,ziplist

hashtable:最基本的哈希表(reds內部的哈希表的實現)

ziplist:壓縮列表,在特定情況下節省空間(在哈希表里的元素比較少的時候,優化成ziplist)

設置哈希表命令:

HSET zhangsan field 11 lisi field 12 wangwu field 13注意:key field value的形式

Redis 7.0 用 ??listpack?? 全面替代?ziplist?作為緊湊型數據結構,圖中哈希鍵?zhangsan?滿足壓縮條件,因此展示為?listpack?而非?ziplist?或?hashtable?

特性ziplist (舊版)listpack (Redis 7.0+)
??數據更新??可能觸發級聯內存重分配獨立節點更新,無連鎖反應
??查詢效率??O(n) 遍歷O(n) 但常數項更低
??內存布局??前項指針導致反向遍歷困難自包含節點(含本節點長度)
??最大元素數??hash-max-ziplist-entries=512hash-max-listpack-entries=512
??單元素最大長度??hash-max-ziplist-value=64hash-max-listpack-value=64
??安全性??級聯更新可能引發性能波動無級聯風險

如果此時key特別多,hash對應也特別多,那么每個hash不大的情況下,盡量去壓縮后,讓整體的占用的內存更小

為啥不用hashtable?

數據量過小(僅3個字段),使用?hashtable?會造成:

  • ??內存浪費??:哈希表需預分配桶空間 + 指針開銷
  • ??CPU效率低??:計算哈希值的時間遠高于直接遍歷小數據集

?🚀2.3list類型

涉及的類型所示:linkedlist,ziplist

linkedlist:鏈表,占用空間大,執行效率高

ziplist:壓縮列表,在特定情況下節省空間(在哈希表里的元素比較少的時候,優化成ziplist)

但是從redis中3.2開始,應投入了新的實現方式,quicklist兼顧了linkedList與ziplist

quicklist就是一個鏈表,每個元素又是一個ziplist把空間和效率都兼顧到

 lpush key4 1 2 3 4object encoding key4

執行結果如下圖所示:?

?

🚀?2.4set類型

涉及的類型:hashtable,intset

hashtable:最基本的哈希表(reds內部的哈希表的實現)

intset:如果集合中都是整數,優化為intset

🚀2.5zset類型

涉及的編碼類型:skiplist,ziplist

skiplist:跳表也是鏈表,每個節點上有很多個指針域,巧妙的搭配這些指針域的指向,可以做到從跳表上查詢元素的時間復雜度是O(logN)

ziplist:壓縮列表,在特定情況下節省空間(在哈希表里的元素比較少的時候,優化成ziplist)

📚?3.redis的工作過程

🚀3.1單線程模型

redis只使用一個線程來處理所有的命令請求;但是不是說redis服務器進程內部只有一個線程,當然還包括多線線程來處理我們的網絡IO(redis是一個客戶端服務器結構的程序)

注意:在多個請求同時到達我們的redis服務器,也是在隊列中進行排隊,等待redis從隊列中一個一個取出來再執行,redis是串行來執行這些命令的

為什么redis可以使用單線程模型???

redis能夠使用單線程模型,很好工作;主要原因是redis是核心業務邏輯,短平快;不消耗CPU資源,不吃多核!!!

弊端:某個時間操作占用過長,就會阻塞其他命令

🚀3.2redis效率

注意:這里的快,是在明確的對比上來說的;

1.redis是訪問內存的,數據庫訪問硬盤

2.redis核心功能,比數據庫的核心功能更簡單

3.單線程模型,避免了一些不必要的線程競爭開銷

4.處理網絡IO時候,使用了epoll這樣的IO多路復用機制(一個線程,可以管理多個socket)針對TCP來說,服務器每次要服務一個客戶端,都需要給這個客戶端安排一個socket進行通信

但是,這些socket都在無時無刻都在傳輸數據嗎?

當然不是的,?很多情況下,每個客戶端和服務器之間的通信沒有那么頻繁此時大多數socket大部分時間都是靜默的,沒有數據進行傳輸

注意:epoll的IO多路復用機制的前提是交互不頻繁,大部分時間都在等待?

📚?4.總結

Redis核心技術解析:本文深入剖析Redis的高效實現機制。首先介紹Redis如何優化基礎數據結構,通過靈活編碼(如string類型采用raw/embstr/int編碼)實現時空平衡;其次詳解各數據類型(hash/list/set/zset)的底層實現,如ziplist/listpack等壓縮結構在小數據量時的空間優化;然后解析Redis單線程模型的工作機制及其高效原因(內存操作、IO多路復用);最后指出Redis在核心業務上的"短平快"特性是其高性能關鍵。文章通過具體命令示例和編碼轉換條件,展現了Redis精巧的內部設計哲學。

🌅🌅🌅~~~~最后希望與諸君共勉,共同進步!!!


💪💪💪以上就是本期內容了, 感興趣的話,就關注小編吧。

? ? ?? 😊😊??期待你的關注~~~

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

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

相關文章

Halcon —— 多種二維碼檢測

工業視覺實戰:Halcon多類型二維碼識別技術詳解 在工業自動化場景中,兼容多種二維碼類型是提高生產線靈活性的關鍵。本文將深入解析Halcon實現Data Matrix、QR Code和PDF417三種主流二維碼的兼容識別方案,并重點解釋核心算子參數。 一、多類型…

安卓vscodeAI開發實例

前言 前些天發現了一個巨牛的人工智能免費學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站 目錄 一、安卓開發基礎與工具鏈革新 1.1 Android Studio的局限性分析 1.2 VSCode在移動開發中的崛起 1.3 跨平臺開發工具鏈對比…

③通用搜索---解析FastAdmin中的表格列表的功能

深度解析FastAdmin中的表格列表的功能-CSDN博客文章瀏覽閱讀25次。本文將FastAdmin框架的CRUD功能配置要點進行了系統梳理。官方文檔與開發經驗相結合,詳細介紹了菜單顯示、TAB過濾、通用搜索、工具欄按鈕、動態統計、快速搜索等17項功能的配置方法。包括字段渲染&a…

DeepSeek 助力 Vue3 開發:打造絲滑的日歷(Calendar),日歷_項目里程碑示例(CalendarView01_22)

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏關注哦 💕 目錄 Deep…

Python爬蟲實戰:獲取Diesel電商數據并分析

1. 引言 在當今數字化時代,電商平臺積累了海量的產品和用戶數據。通過對這些數據的挖掘和分析,企業可以深入了解市場動態、消費者需求和競爭態勢,從而制定更有效的營銷策略和產品規劃。Diesel 作為知名的時尚品牌,其在電商平臺上的表現備受關注。本研究旨在通過 Python 爬…

Spring RestTemplate + MultiValueMap vs OkHttp 多值參數的處理

📌 Spring RestTemplate vs OkHttp:多值參數處理 一、MultiValueMap 與 FormBody 的差異 特性RestTemplate MultiValueMapOkHttp FormBody多值參數支持? 原生支持(add("key", "value") 自動追加)? 需顯…

GelSight視觸覺3D輪廓儀賦能Beomni人形機器人觸覺遙測,開啟人形機器人觸覺應用新場景

在智能制造、航空航天等領域,傳統機器人常面臨操作精度不足、環境適應力弱等問題。GelSight觸覺傳感技術與Beomni人形機器人的融合,為這些場景提供了新可能 —— 通過亞微米級觸覺感知能力,操作員可遠程感知物體表面細節,在復雜環…

python設置word的字體顏色

這個錯誤是由于python-docx的RGBColor對象沒有.rgb屬性導致的。正確的屬性訪問方式是分別獲取紅、綠(g)、藍(b)三個分量。以下是修復方案: 錯誤原因分析 RGBColor對象的結構如下: from docx.shared import RGBColorcolor RGBColor(255, 204, 51) pri…

推薦模型之GBDT-LR

一、概念 GBDT-LR模型由FaceBook(現在的Meta)團隊于2014年在論文《Practial Lessons from Predicting Clicks on Ads at Facebook》中提出,目標是用于預測FaceBook的廣告點擊量(實際上廣告和推薦領域很多算法模型都是共用的&#…

Java實現Excel圖片URL篩選與大小檢測

Java實現Excel圖片URL篩選與大小檢測 在數據處理場景中,我們常需篩選Excel中的圖片URL。本文分享一個完整的Java方案,涵蓋從讀取圖片URL到檢測有效性、篩選大小,再到生成新Excel文件的全過程,同時講解開發與優化過程,…

Java 實現后端調用 Chromium 瀏覽器無頭模式截圖的方案

Java 實現后端調用 Chromium 瀏覽器無頭模式截圖的方案 1. 使用 Playwright 優點:功能強大、支持多瀏覽器(Chromium/Firefox/WebKit)、支持異步操作。實現方式: 利用 Playwright 創建無頭瀏覽器實例;使用 Java 的調度…

基于多模態文檔解析與RAG的行業知識庫構建技術指南

1. 技術背景 隨著企業非結構化數據(掃描件、PDF、圖像等)占比超過80%,傳統關鍵詞檢索已無法滿足精準問答需求。本文提出融合**計算機視覺(CV)與大語言模型(LLM)**的解決方案,關鍵技…

基于YOLOv11+PP-OCRv5深度學習的智能車牌檢測與識別系統python源碼+pytorch模型+評估指標曲線+精美GUI界面

【算法介紹】 智能車牌檢測與識別系統借助當下前沿的 YOLOv11 算法以及 PP-OCRv5 算法,能夠在復雜多樣的環境場景中,快速且精準地達成實時車牌檢測與識別任務。在現代交通管理領域,該技術意義重大,它能夠推動涉及車輛識別與記錄的…

[深度學習]全連接神經網絡

目錄 一、實驗目的 二、實驗環境 三、實驗內容 3.1 完成解壓數據集相關操作 3.2分析代碼結構并運行代碼查看結果 3.3修改超參數(批量大小、學習率、Epoch)并對比分析不同結果 3.4修改網絡結構(隱藏層數、神經元個數)并對比分…

openEuler安裝BenchmarkSQL

BenchmarkSQL是一個用于評估數據庫性能的開源工具。它模擬TPC-C(Transaction Processing Performance Council)基準測試場景,該場景主要用于衡量數據庫在處理大量并發事務時的能力。TPC-C測試場景模擬了一個典型的批發分銷商的業務環境&#…

分庫分表之優缺點分析

大家好,我是工藤學編程 🦉一個正在努力學習的小博主,期待你的關注實戰代碼系列最新文章😉C實現圖書管理系統(Qt C GUI界面版)SpringBoot實戰系列🐷【SpringBoot實戰系列】Sharding-Jdbc實現分庫…

【2025年超詳細】Git 系列筆記-4 git版本號及git相關指令運用。

系列筆記 【2025年超詳細】Git 系列筆記-1 Git簡述、Windows下git安裝、Linux下git安裝_displaying 2e144 commits. adjust this setting in -CSDN博客 【2025年超詳細】Git 系列筆記-2 github連接超時問題解決_2025訪問github-CSDN博客 【2025年超詳細】Git 系列筆記-3 Git…

圖像特征檢測算法SuperPoint和SuperGlue

SuperPoint 背景與概述 :SuperPoint 是一個自監督的全卷積神經網絡,用于提取圖像中的興趣點及其描述子。它在 2018 年由 Magic Leap 提出,通過在合成數據集上預訓練一個基礎檢測器 MagicPoint,然后利用同胚適應技術對真實圖像數據…

nginx 和 springcloud gateway cors 跨域如何設置

在跨域資源共享(CORS)配置中,Nginx 和 API Gateway(如Spring Cloud Gateway、Kong等)是兩種常見的解決方案,它們的配置邏輯和適用場景有所不同。以下是詳細對比和配置示例: 一、核心區別 維度NginxAPI Gateway定位反向代理/Web服務器微服務流量入口配置位置基礎設施層應…

電路筆記(信號):一階低通RC濾波器 一階線性微分方程推導 拉普拉斯域表達(傳遞函數、頻率響應)分析

目錄 RC 低通濾波器電路一階線性微分方程推導拉普拉斯域表達(傳遞函數)傳遞函數 H ( s ) H(s) H(s)頻率響應(令 s j ω s j\omega sjω)幅頻特性:相位特性:Bode 圖(線性系統頻率響應&#x…