Redis 數據類型和各自的使用場景

Redis 數據類型和各自的使用場景

  • 1、String類型
  • 2、List類型
  • 3、Hash類型
  • 4、Set類型
  • 5、Zset類
  • BitMap:
  • HyperLogLog:
  • GEO:.
  • Stream:
  • 跳表

常見的有五種數據類型:String字符串,List列表,Hash哈希,Set集合、Zset有序集合。

1、String類型

String適用場景:一般用于緩存字符串對象
它底層的數據結構是 SDS簡單動態字符串。
1、SDS 不僅可以保存文本數據,而且能保存圖片、視頻、壓縮文件這樣的二進制數據。
2、SDS 獲取字符串長度的效率更高,用 len 屬性記錄了字符串長度,時間復雜度大約是 O(1)。而C 語言的字符串沒有len, O(n);
3、Redis 的 SDS API 是安全的,拼接字符串不會造成緩沖區溢出,因為拼接之前會先檢查,如果空間不夠就自動擴容。

2、List類型

List場景:一般用于任務隊列
底層數據結構由 quicklist 快表實現。
Quicklist :「雙鏈表 + 壓縮列表」組合,一個 quicklist 就是一個鏈表,而鏈表中的每個元素是一個壓縮列表。
壓縮列表:是一塊連續的內存空間,有點像數組。但是它有一個記錄前一個元素長度的字段,主要是幫助快速定位到列表中的下一個元素,從而提高遍歷效率。但是有【連鎖更新】的問題。

  • 前一個節點長度 < 254 字節,prevlen 需要用 1 字節的空間來保存這個長度值
  • 前一個節點長度 > 254 字節,prevlen 需要用 5 字節的空間來保存這個長度值
  • 本來都在250~253 之間,因為前面插入了新的導致最前面大于254,后面都跟著變了
    解決辦法:控制每個鏈表節點中的壓縮列表的元素個數,來規避連鎖更新的問題。因為壓縮列表元素越少,連鎖更新帶來的影響就越小。

3、Hash類型

Hash場景:購物車等。
鍵:cart:123 、字段:product:456、值:2 (用戶123的購物車里有456產品,購物車里456產品的數量是2)
在 Redis 7.0 中,由 listpack 數據結構來實現。
listpack 是在壓縮列表的基礎上改造而來的,它沒有壓縮列表中記錄前一個節點長度的字段了,只記錄當前節點的長度,所以加入新元素的時候,不會影響其他節點的長度字段的變化,從而避免了壓縮列表的連鎖更新問題。

4、Set類型

Set 場景:一些聚合計算場景,比如點贊、共同關注等。
Set 類型的底層數據結構是由哈希表或整數集合實現的:
如果集合中的元素都是整數且元素個數小于默認的 512 個,Redis 會使用整數集合作為 Set 類型的底層數據結構;
如果集合中的元素不滿足上面條件,則 Redis 使用哈希表作為 Set 類型的底層數據結構。

5、Zset類

Zset場景:排序場景,比如Rank排行榜、姓名排序等。
Zset 類型的底層數據結構是由 listpack 數據結構來實現。
Redis 后續版本又支持四種數據類型,它們的應用場景如下:

BitMap:

二值狀態統計的場景,比如簽到、判斷用戶登陸狀態等;

HyperLogLog:

海量數據基數統計的場景,比如百萬級網頁訪問量計數等;

GEO:.

存儲地理位置信息的場景,比如滴滴叫車;

Stream:

消息隊列,相比于基于 List 類型實現的消息隊列,有這兩個特有的特性:自動生成全局唯一消息ID,支持以消費組形式消費數據。

跳表

跳表其實是一種多層的有序鏈表,跳表在原有的有序鏈表基礎上結合二分查找的思想增加了多級索引,通過索引來實現快速查詢。
我們知道對于一個單鏈表來說,即使它有序,查找的時間復雜度還是O(n)。我們可以做一些優化,每兩個結點提取一個"索引"到上一級,上一級有到下一級的指針。那如果鏈表數據是1-10,正常查找是O(n),有了索引之后就可以2、4、6、8這樣來查找,甚至說數據多的話可以建立三層四層索引,以此來提升工作效率。
跳表的查詢、插入、刪除時間復雜度都是O(logn),空間復雜度是 O(n)

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

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

相關文章

一天跌20%,多只可轉債“腰斬”,近百只跌破面值,“退可守”的香餑餑為何破防?

專業人士指出&#xff0c;近期部分可轉債大跌原因主要有兩點&#xff1a;一方面&#xff0c;轉債市場與權益市場聯動性強。另一方面&#xff0c;近期公布的宏觀經濟數據穩中趨緩&#xff0c;“供強需弱”特征依然明顯&#xff0c;證監會主席吳清發言及“科創板八條”新規延續了…

在舉辦數字化營銷活動前該如何做客戶畫像和制定營銷方案

在當今數字化時代&#xff0c;舉辦成功的營銷活動離不開對客戶的精準了解。而根據產品屬性來描繪客戶畫像&#xff0c;并據此制定營銷方案&#xff0c;是提高營銷效果的關鍵。 一、產品屬性分析 首先&#xff0c;咱們得好好琢磨一下產品本身。比如說&#xff0c;如果是一款…

基于幅值判斷的工頻故障分量距離保護

統的繼電保護原理是基于工頻電氣量的&#xff0c;但近年來&#xff0c;反應故障分量的高速繼電保護原理在微機保護裝置中被廣泛應用。故障分量只在設備發生故障時才出現&#xff0c;因此可以用疊加原理來分析其特征。 將電力系統發生的故障視為非故障狀態與故障附加狀態的疊加…

數據產品賦能數字化轉型

數據產品賦能數字化轉型 引言:數據產品的創新與發展:賦能決策智能化的鑰匙一、數據產品的定義與特征二、數據產品的核心功能三、應用實踐與案例分析四、未來展望引言:數據產品的創新與發展:賦能決策智能化的鑰匙 在數字化轉型的浪潮下,數據已成為企業核心競爭力的關鍵要素…

Http客戶端-Feign 學習筆記

作者介紹&#xff1a;計算機專業研究生&#xff0c;現企業打工人&#xff0c;從事Java全棧開發 主要內容&#xff1a;技術學習筆記、Java實戰項目、項目問題解決記錄、AI、簡歷模板、簡歷指導、技術交流、論文交流&#xff08;SCI論文兩篇&#xff09; 上點關注下點贊 生活越過…

6.26.1 殘差卷積變壓器編碼器的混合工作流程用于數字x線乳房x光片乳腺癌分類

基于殘差卷積網絡和多層感知器變壓器編碼器(MLP)的優勢&#xff0c;提出了一種新型的混合深度學習乳腺病變計算機輔助診斷(CAD)系統。利用骨干殘差深度學習網絡創建深度特征&#xff0c;利用Transformer根據自注意力機制對乳腺癌進行分類。所提出的CAD系統具有識別兩種情況乳腺…

索引:通往高效查詢的橋梁(五)

引言 上一章&#xff0c;我們探索了SQL的基礎知識&#xff0c;從DDL、DML到DQL&#xff0c;掌握了構建和操作數據庫的基本技能。現在&#xff0c;我們將目光轉向數據庫性能的核心——索引。索引&#xff0c;猶如圖書館中的目錄系統&#xff0c;極大地加速了數據檢索過程&#…

cmd設置編碼為utf8

文章目錄 臨時設置永久設置(通過注冊表) cmd命令亂碼&#xff0c;解決方案比較簡單。 輸入chcp&#xff0c; 如果返回的是936&#xff0c;通常是GBK或CP936。 如果返回的是65001&#xff0c;表示是UTF-8。 臨時設置 chcp 65001 # 設置 chcp # 查看 永久設置(通過注冊表) 打…

等保1.0與2.0:物理環境安全的演進之路

在信息安全的大廈中&#xff0c;物理環境安全是那堅實的基礎&#xff0c;承載著整個信息系統的穩定與安全。隨著時間的推移&#xff0c;我國的信息安全等級保護標準也在不斷地進化與完善&#xff0c;從等保1.0到等保2.0&#xff0c;不僅僅是數字上的遞增&#xff0c;更是對物理…

通用后臺管理系統(一)——項目介紹

目錄 二、文檔結構 src文件夾&#xff1a; 三、技術和插件 1、Vue router 2、element-ui框架 3、樣式插件less 4、vuex狀態管理 5、axios.js 6、mock.js模擬數據 7、echarts圖表工具 四、項目效果展示 總結 一、項目介紹 通用后臺管理是采用vue2cli開發的項目&#…

QLibrary::load、QPluginLoader::instance加載錯誤

現象 在使用pluginLoader.instance()總是為空&#xff0c;通過pluginLoader.errorString()獲取的錯誤是 “Cannot load library xxxPlugin.dll: 找不到指定的程序。” 原因 是否缺少依賴的dll&#xff1b;依賴的dll是否在程序的運行中&#xff1b;依賴的dll的版本是否正確&am…

Sql審核平臺Archery的搭建和簡單配置

Sql審核平臺Archery的搭建和簡單配置 Archery是一個開源的Web應用&#xff0c;基于Python開發&#xff0c;利用Flask作為后端框架&#xff0c;前端采用Vue.js&#xff0c;構建了一個現代化的數據操作界面。提供了SQL審核、數據查詢、報表生成等功能&#xff0c;同時支持多種數據…

async異步函數

文章目錄 異步函數&#xff08;用 async 聲明的函數&#xff09;異步函數的返回值async/await 的使用異步函數的異常處理總結 感謝鐵子閱讀&#xff0c;覺得有幫助的話點點關注點點贊&#xff0c;謝謝&#xff01; 異步函數&#xff08;用 async 聲明的函數&#xff09; 異步函…

yolov8部署資料

1.labelImg安裝&#xff1a; labelImg的安裝過程可以參照以下步驟進行&#xff0c;這里以Windows操作系統為例&#xff1a; 1. 檢查Python環境 首先&#xff0c;需要確認你的電腦上是否已經安裝了Python。你可以通過Win R打開windows“運行”對話框&#xff0c;輸入cmd&#x…

瑤池數據庫SQL-問題二的解決方案

瑤池數據庫SQL-問題二的解決方案 為什么選問題二問題二準備工作解決方案第一步第二步初步嘗試再次嘗試主表自關聯查詢滿足條件數據 解題感受 為什么選問題二 個人沒有詳細的看三個題目的具體內容&#xff0c;只是看了三個題目的題目名稱&#xff0c; 最后覺得問題二比較有意思…

1.1 離散信號的時域分析

目錄 基本離散信號 單位脈沖序列δ[k] 單位階躍序列u[k] 矩形序列Rn[k] 實指數序列x[k] 虛指數序列和正弦序列x[k] 基本運算 翻轉 位移 抽取 內插 卷積 相關 DSP&#xff08;Digital Signal Processing&#xff09; 數字信號處理 基本離散信號 單位脈沖序…

目標檢測系列(四)利用pyqt5實現yolov8目標檢測GUI界面

目錄 1、pyqt5安裝 2、PyCharm添加Qt Designer、PyUIC 3、Qt Designer設計界面 4、根據ui文件自動生成py文件 5、修改py文件來調用檢測程序 6、執行py文件啟動 1、pyqt5安裝 Qt Designer&#xff1a;一個用于創建圖形用戶界面的工具&#xff0c;可輕松構建復雜的用戶界面…

linux kernel slab分配器

slab分配器是一種高效的內存管理機制,主要用于小塊內存的分配和釋放。 slab分配器簡述 slab分配器是一種內存管理機制,它將內存分割成多個"緩存"(cache),每個緩存包含固定大小的對象。這些對象可以是內核數據結構、緩沖區或其他小塊內存。 slab分配器用途 高…

還在花錢做數據可視化?為大家推薦一款免費可視化工具

在當今數據驅動的世界里&#xff0c;數據可視化已經成為不可或缺的工具&#xff0c;幫助我們更好地理解和分析信息。然而&#xff0c;許多企業和個人仍在為昂貴的可視化軟件買單&#xff0c;承受著高昂的費用和復雜的操作流程。因此&#xff0c;作為一個經常接觸數據可視化的相…

php聚合快遞寄快遞小程序

一、引言&#xff1a;告別傳統寄件&#xff0c;擁抱便捷新選擇 在數字化時代&#xff0c;我們越來越追求便捷和高效。傳統的寄件方式已經無法滿足現代人快速、便捷的需求。因此&#xff0c;一款聚合快遞優惠寄件小程序應運而生&#xff0c;它集合了多家快遞公司&#xff0c;為…