redis---常用數據類型及內部編碼

Redis 中每種常用數據類型都對應多種內部編碼,這些編碼會根據數據特征(如大小、數量)自動切換,以平衡存儲效率和操作性能。

1.字符串(String)

用途:存儲文本、數字或二進制數據,是最基礎的類型。

內部編碼

  1. int

    • 適用場景:存儲 64 位整數(如?123-456)。
    • 特點:直接以整數形式存儲,節省內存,支持快速自增 / 自減(INCR/DECR)。
  2. embstr

    • 適用場景:存儲短字符串(Redis 3.2+ 中長度 ≤ 44 字節)。
    • 特點:字符串內容與元數據(如長度)存儲在連續內存塊,減少內存碎片,創建和刪除更高效。
  3. raw

    • 適用場景:存儲長字符串(長度 > 44 字節)或非整數數據。
    • 特點:基于動態字符串(SDS)結構實現,支持高效的字符串拼接(APPEND)和修改。

2.哈希(Hash)

用途:存儲結構化數據(如用戶信息、商品屬性),以 “字段 - 值” 對形式組織。

內部編碼

  1. ziplist(壓縮列表)

    • 適用場景:字段數量少(默認 ≤ 512)且字段 / 值均為短字符串(默認 ≤ 64 字節)。
    • 特點:所有字段和值按順序緊湊存儲在連續內存,內存利用率極高,但不適合頻繁修改大量字段。
  2. hashtable(哈希表)

    • 適用場景:字段數量多或字段 / 值較長(超過?ziplist?限制)。
    • 特點:采用數組 + 鏈表結構,支持 O (1) 時間復雜度的增刪改查,適合頻繁操作。

切換規則:當字段數 >?hash-max-ziplist-entries(默認 512)或任一字段 / 值長度 >?hash-max-ziplist-value(默認 64 字節)時,自動從?ziplist?轉為?hashtable

3. 列表(List)

  • 功能:有序、可重復的元素集合,支持兩端插入 / 刪除操作。
  • 內部編碼
    • ziplist(壓縮列表):當列表元素少且元素為短字符串或小整數時使用(默認元素數 ≤512,單個元素 ≤64 字節),連續內存存儲,節省空間。
    • linkedlist(雙向鏈表):當列表元素過多或元素過大時使用,適合頻繁修改操作。
    • 注意:Redis 3.2+ 引入?quicklist?作為默認編碼,結合了?ziplist?和?linkedlist?的優點,將列表分割為多個?ziplist?片段,用鏈表連接。

4.集合(Set)

  • 功能:無序、不可重復的元素集合,支持交集、并集等操作。
  • 內部編碼
    • intset(整數集合):當集合元素全為整數且數量少(默認 ≤512)時使用,連續內存存儲,比哈希表更節省空間。
    • hashtable(哈希表):當集合包含非整數元素或元素數量過多時使用,通過哈希表實現去重。

5.zset

? ? ? ? ? ? ?Redis 中的 ZSET(Sorted Set,有序集合)是一種特殊的數據結構,它結合了集合(Set)和有序性的特性。與普通集合(Set)一樣,ZSET 中的元素是唯一的,不會重復,但每個元素都會關聯一個浮點數分數(score),Redis 正是通過這個分數來為集合中的元素進行排序。

內部編碼(存儲結構)

ZSet 會根據元素數量和大小自動選擇以下編碼:

  1. ziplist(壓縮列表)

    • 適用場景:元素數量少(默認 ≤128 個)且元素 / 分數都是短值(默認 ≤64 字節)
    • 存儲方式:元素和分數成對緊湊存儲在連續內存中,按分數排序
    • 優點:內存占用極低,適合小型 ZSet
  2. skiplist + hashtable(跳躍表 + 哈希表)

    • 適用場景:元素數量多或元素 / 分數較大時
    • 存儲方式:
      • 跳躍表:按分數排序存儲元素,支持快速范圍查詢和排名計算
      • 哈希表:映射元素到分數,支持 O (1) 復雜度的分數查詢
    • 優點:操作效率高,適合大型 ZSet

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

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

相關文章

crypto.randomUUID is not a function

在本地運行時 crypto.randomUUID 好使,build 后放到服務器上用域名訪問就不好使。原因:瀏覽器策略,瀏覽器在非https、localhost的環境中訪問時,crypto.randomUUID 是不可用的開發時使用的是localhost正常訪問 生產臨時使用的是htt…

【思考】什么是服務器?什么是服務?什么是部署?

文章目錄1 什么是服務器?什么是服務?端口是什么意思?2 什么是部署?1 什么是服務器?什么是服務?端口是什么意思? 服務器本質是一臺運行著程序的電腦,它可以運行著很多程序&#xff0c…

自動駕駛導航信號使用方式調研

1 總結 本文調研在給定導航信號后,如何在端到端架構下,利用導航信息引導軌跡生成。 目前主流的方案可以分為2種。一種是將導航作為“前置引導”深度融入軌跡生成過程(導航前置型);另一種則是將導航作為“后置評價”標準…

玳瑁的嵌入式日記D21-08020(數據結構)

雙向鏈表double link listtypedef struct dou_node { DATATYPE data; struct dou_node *prev; struct dou_node *next; }DouLinkNode;雙向鏈表:節點 數據 NEXT PREV . 手撕代碼(增加刪除) 增加,刪除的操作, 需要 tmp 停止待操作節點的前一…

Uipath查找元素 查找子元素 獲取屬性活動組合使用示例

Uipath 查找元素 查找子元素 獲取屬性組合使用示例使用場景案例介紹項目流程圖附加瀏覽器查找元素查找子元素遍歷循環獲取屬性點擊元素使用場景 在實際場景中,有時需RPA自動點擊某組范圍元素或獲取某組范圍元素的值,如需獲取指定的父元素,再…

【MongoDB與MySQL對比】

MongoDB 與 MySQL 全方位對比分析在現代軟件開發中,數據庫的選擇直接影響系統性能、擴展性和開發效率。MongoDB 和 MySQL 作為兩種主流數據庫,分別代表了 NoSQL 和關系型數據庫的典型,各自在不同場景中發揮著重要作用。本文將拋開代碼示例&am…

Spring AI開發指導-對話模型

對話模型接口描述Spring AI基于Spring Cloud的架構體系,定義了一系列可擴展的API接口,支持對接不同類型的AI大模型的核心功能,這些API接口支持同步編程模式或者異步編程模式:接口ModelModel是同步編程模式接口,其參數支…

Win11 下卸載 Oracle11g

目錄 1、停止服務 2、啟動 Universal install 應用 3、執行 deinstall.bat 腳本 4、刪除注冊表相關數據 5、刪除環境變量中的oracle相關路徑 6、刪除安裝文件 7、刪除C盤中的相關Oracle文件 8、刪除 Oracle 數據存放目錄 9、檢查 10、重裝oracle可能還會碰到的問題 &…

深入剖析Spring Boot應用啟動全流程

目錄 前言 啟動流程概覽 一、第一階段:初始化SpringApplication 二、第二階段:運行SpringApplication 三、第三階段:環境準備 四、第四階段:創建應用上下文 五、第五階段:準備應用上下文 六、第六階段&#xf…

Matplotlib 可視化大師系列(三):plt.bar() 與 plt.barh() - 清晰對比的柱狀圖

目錄Matplotlib 可視化大師系列博客總覽Matplotlib 可視化大師系列(三):plt.bar() 與 plt.barh() - 清晰對比的柱狀圖一、 柱狀圖是什么?何時使用?二、 函數原型與核心參數plt.bar(x, height, ...) - 垂直柱狀圖plt.ba…

基于 FastAPI 和 OpenFeature 使用 Feature Flag 控制業務功能

模擬業務場景:多租戶系統跨域轉賬,需要控制某租戶下某用戶是否可以在某域轉賬 open_feature_util.py import typing from abc import abstractmethod, ABCMeta from typing import Sequencefrom openfeature.evaluation_context import EvaluationContex…

Stm32通過ESP8266 WiFi連接阿里云平臺

本文將介紹stm32如何通過WiFi來連接阿里云,上傳數據和接收指令。要先與阿里云建立TCP連接,然后再通過MQTT協議交互。 大體流程:1、在阿里云網頁上創建產品和設備;2、stm32通過WiFi連接云平臺;3、MQTT連接阿里云&#…

北京-測試-入職甲方金融-上班第三天

今日上班時間9-20.18,再加42分鐘就可以拿到75塊錢了,但我想回家,所以下班今天上午有人事舉辦的入職培訓,下午有業務培訓,培訓完領導給我安排了兩個需求。慌死,嚇死,我都不懂,業務和工…

Java基礎第2天總結

使用switch時注意事項:表達式類型只能是byte、short、int、char,JDK5開始支持枚舉,JDK7開始支持String,不支持double、float、long(精確度問題,小數有點不精確)。case給出的值不允許重復,且只能是字面量,不…

鴻蒙開發中的List組件詳解

目錄 引言 1.List組件基礎 2.List接口參數 1.space 2.initialIndex 3.scroller 3.ListView的屬性 1.listDirection 2.lanes 3.divider 4.scrollBar 4.布局與約束 5.ListItem生命周期 1.使用ForEach創建ListItem 2.使用LazyForEach創建ListItem 3…

2026界計算機專業畢業的有福了!(開題報告任務書)

開題報告 我們以基于Java的婚紗店管理系統為案例進行指導。 任務書: 首先是畢設的立題依據,這個主要描寫一些簡潔大體的大白話,描述一下你為什么要做這個題目的畢設。 那就需要你描述一下現階段社會面婚紗店的運營情況,寫一些…

安全、高效、可靠的物理隔離網絡安全專用設備———信刻光盤安全隔離與文件單向導入系統!

著各種數據傳輸、儲存技術、信息技術的快速發展,保護信息安全是重中之重。軍工企業、政府、部隊及企事業單位等利用A網與B網開展導入/導出相關工作已成為不可逆轉的趨勢。針對于業務需要與保密規范相關要求,涉及重要秘密信息,需做到完全的物理…

JetPack 與 PyTorch 版本對應及資源詳情

下載鏈接 JetPack 版本適配 PyTorch 版本發布日期可下載資源(.whl 安裝包 / 文檔)JP 6.1PyTorch 2.5.0a0(構建號:872d972e41.nv24.08.17622132)2024/10/01- torch-2.5.0a0872d972e41.nv24.08.17622132-cp310-cp310-li…

【c++進階系列】:萬字詳解多態

🔥 本文專欄:c 🌸作者主頁:努力努力再努力wz 💪 今日博客勵志語錄: 你以為自己在孤獨地爬坡嗎?看看身后吧——那些被汗水浸濕的腳印,早已連成一道向上的階梯 ★★★ 本文前置知識&am…

AI+預測3D新模型百十個定位預測+膽碼預測+去和尾2025年8月23日第168彈

從今天開始,咱們還是暫時基于舊的模型進行預測,好了,廢話不多說,按照老辦法,重點8-9碼定位,配合三膽下1或下2,殺1-2個和尾,再殺4-5個和值,可以做到100-300注左右。(1)定位…