Redis數據類型詳解

Redis數據類型詳解

Redis 共有 5 種基本數據類型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。

除了 5 種基本的數據類型之外,Redis 還支持 3 種特殊的數據類型:Bitmap、HyperLogLog、GEO。

數據類型 & 數據結構

以下是 Redis 各種數據類型及其對應的數據結構的表格:

數據類型對應的數據結構
字符串 (String)動態字符串(SDS)
哈希 (Hash)哈希表(ziplist、hashtable)
列表 (List)雙向鏈表
集合 (Set)哈希表(無序集合)
有序集合 (ZSet)跳表(Skip List)+ 哈希表
位圖 (Bitmap)位數組
HyperLogLogHyperLogLog(近似計數算法)
地理位置 (Geospatial)有序集合(ZSet)

數據類型詳解

Redis 提供了多種數據類型,每種數據類型的內部數據結構不同,適用于不同的場景。下面是 Redis 的主要數據類型及其相關信息:

1. 字符串(String)

  • 數據結構:動態字符串(SDS)
  • 應用場景
    • 緩存簡單的鍵值對
    • 存儲數字、JSON 字符串、圖片等
    • 計數器、會話管理
  • 優點
    • 操作簡單,速度極快
    • 支持高效的增減操作(如 INCR、DECR)
  • 缺點
    • 存儲數據量有限制
    • 只能存儲單一數據類型
  • 替代方案:Memcached

Java 代碼示例

Jedis jedis = new Jedis("localhost");
jedis.set("name", "Redis");
String name = jedis.get("name");
System.out.println(name); // 輸出: Redis

2. 哈希(Hash)

  • 數據結構:哈希表(ziplist、hashtable)
  • 應用場景
    • 存儲對象的多個屬性(如用戶信息、商品信息、文章信息、購物車信息)
    • 數據分組和數據映射
  • 優點
    • 鍵值對存儲,不需要對所有字段做操作
    • 適合存儲多個字段數據
  • 缺點
    • 內存消耗較高(如果字段較多)
    • 不適合存儲大規模數據
  • 替代方案:MongoDB、關系型數據庫

Java 代碼示例

Jedis jedis = new Jedis("localhost");
jedis.hset("user:1000", "name", "Alice");
jedis.hset("user:1000", "age", "30");
String name = jedis.hget("user:1000", "name");
System.out.println(name); // 輸出: Alice

3. 列表(List)

  • 數據結構:雙向鏈表
  • 應用場景
    • 消息隊列
    • 最近訪問的項目(如網頁歷史)
    • 棧(LIFO)和隊列(FIFO)
  • 優點
    • 支持按序插入和刪除
    • 適合消息隊列和任務調度
  • 缺點
    • 對于大規模數據,操作可能較慢
    • 不支持直接索引
  • 替代方案:Kafka、RabbitMQ

Java 代碼示例

Jedis jedis = new Jedis("localhost");
jedis.lpush("mylist", "item1", "item2", "item3");
List<String> items = jedis.lrange("mylist", 0, -1);
System.out.println(items); // 輸出: [item3, item2, item1]

4. 集合(Set)

  • 數據結構:哈希表(無序集合)
  • 應用場景
    • 去重操作(網站 UV 統計(數據量巨大的場景還是 HyperLogLog更適合一些)、文章點贊、動態點贊等場景)
    • 社交網絡中的用戶關系(共同好友(交集)、共同粉絲(交集)、共同關注(交集)、好友推薦(差集)、音樂推薦(差集)、訂閱號推薦(差集+交集) 等場景)
    • 標簽、興趣愛好等
  • 優點
    • 自動去重
    • 支持交集、并集、差集等操作
  • 缺點
    • 不支持按順序遍歷
    • 對內存消耗較大
  • 替代方案:MongoDB、PostgreSQL

Java 代碼示例

Jedis jedis = new Jedis("localhost");
jedis.sadd("myset", "apple", "banana", "orange");
Set<String> items = jedis.smembers("myset");
System.out.println(items); // 輸出: [banana, apple, orange]

5. 有序集合(Sorted Set,ZSet)

  • 數據結構:跳表(Skip List)+哈希表
  • 應用場景
    • 排行榜
    • 帶權重的數據排序(如評分系統、各種排行榜比如直播間送禮物的排行榜、朋友圈的微信步數排行榜、王者榮耀中的段位排行榜、話題熱度排行榜等)
    • 時間序列數據
  • 優點
    • 按順序存儲數據,支持排序和范圍查詢
    • 支持根據分數排序,靈活高效
  • 缺點
    • 內存消耗較大
  • 替代方案:Elasticsearch、MySQL

Java 代碼示例

Jedis jedis = new Jedis("localhost");
jedis.zadd("myzset", 1, "apple");
jedis.zadd("myzset", 2, "banana");
Set<String> items = jedis.zrange("myzset", 0, -1);
System.out.println(items); // 輸出: [apple, banana]

6. 位圖(Bitmap)

  • 數據結構:位數組
  • 應用場景
    • 位標志操作(用戶簽到情況、活躍用戶情況、用戶行為統計(比如是否點贊過某個視頻))
    • 高效統計
  • 優點
    • 空間占用小
    • 高效操作
  • 缺點
    • 只能用于位操作
  • 替代方案:BitSet(Java 標準庫)

Java 代碼示例

Jedis jedis = new Jedis("localhost");
jedis.setbit("mybitmap", 0, true); // 設置第0位為1
Boolean bit = jedis.getbit("mybitmap", 0);
System.out.println(bit); // 輸出: true

7. HyperLogLog

  • 數據結構:HyperLogLog(近似計數算法)
  • 應用場景
    • 統計大規模唯一元素的基數(熱門網站每日/每周/每月訪問 ip 數統計、熱門帖子 uv 統計)
  • 優點
    • 極低的內存消耗
    • 可以處理大規模數據
  • 缺點
    • 是近似值,可能存在誤差
  • 替代方案:HLL 算法、Count-Min Sketch

8. 地理位置(Geospatial)

  • 數據結構:有序集合(ZSet)
  • 應用場景
    • 地理位置查詢(如附近的餐廳、商店)
  • 優點
    • 支持范圍查詢、半徑查詢
  • 缺點
    • 需要維護坐標數據
  • 替代方案:Google Maps API、Elasticsearch

總結:

Redis 提供了多種數據結構,每種結構適用于不同的應用場景。在使用時,需要根據需求選擇合適的數據類型。不同的類型在內存消耗、操作復雜度和查詢效率上各有優勢。對于特定場景,可以根據需要選擇合適的替代方案,例如使用 Kafka 替代消息隊列等。

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

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

相關文章

【第13章】億級電商平臺訂單系統-高性能之異步架構設計

1-1 本章導學 課程導學 學習目標:掌握大型系統架構設計難點之高性能異步架構設計項目落地:訂單系統高性能異步架構設計(年交易200億B2B電商平臺)本章主要內容 1. 為何需要異步消息架構 分析同步架構的性能瓶頸異步架構對系統解耦與性能提升的核心價值2. 確定異步消息技術…

2025-03-20 學習記錄--C/C++-C 庫函數 - toupper()、tolower()、 isspace()

合抱之木&#xff0c;生于毫末&#xff1b;九層之臺&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、C 庫函數 - toupper() ?? C 標準庫 - <ctype.h> C 標準庫的 ctype.h 頭文件提供了一些函數&#xff0c;可用于測試和…

LoRaWAN技術解析

LoRaWAN&#xff08;Long Range Wide Area Network&#xff09;是一種基于 LoRa&#xff08;Long Range&#xff09;技術的低功耗廣域網絡協議&#xff0c;專為物聯網&#xff08;IoT&#xff09;設備的無線通信而設計。它是一種開放的、標準化的通信協議&#xff0c;支持大規模…

織夢DedeCMS如何獲得在列表和文章頁獲得頂級或上級欄目名稱

獲得頂級或二級欄目的名稱&#xff0c;都需要修改php文件&#xff0c;修改的文件【/include/common.func.php】將代碼插入到這個文件的最下面即可&#xff1b; 一、獲得當前文章或欄目的【頂級欄目】名稱 1、插入頂級欄目代段 //獲取頂級欄目名 function GetTopTypename($id…

虛幻基礎:ue自定義類

文章目錄 Gameplay Tag&#xff1a;ue標簽類創建&#xff1a;其他-數據表格-gameplaytag安裝&#xff1a;項目設置&#xff1a;gamePlayTag&#xff1a;gamePlay標簽列表使用&#xff1a;變量類型&#xff1a;gamePlayTag primary data asset&#xff1a;ue數據類&#xff1a;通…

易語言模擬真人鼠標軌跡算法

一.簡介 鼠標軌跡算法是一種模擬人類鼠標操作的程序&#xff0c;它能夠模擬出自然而真實的鼠標移動路徑。 鼠標軌跡算法的底層實現采用C/C語言&#xff0c;原因在于C/C提供了高性能的執行能力和直接訪問操作系統底層資源的能力。 鼠標軌跡算法具有以下優勢&#xff1a; 模擬…

Matplotlib 柱形圖

Matplotlib 柱形圖 引言 在數據可視化領域&#xff0c;柱形圖是一種非常常見且強大的圖表類型。它能夠幫助我們直觀地比較不同類別或組之間的數據大小。Matplotlib&#xff0c;作為Python中最受歡迎的數據可視化庫之一&#xff0c;提供了豐富的繪圖功能&#xff0c;其中包括創…

sparksql的Transformation與 Action操作

Transformation操作 與RDD類似的操作 map、filter、flatMap、mapPartitions、sample、 randomSplit、 limit、 distinct、dropDuplicates、describe&#xff0c;而以上這些都是企業中比較常用的&#xff0c;這里在一個文件中統一論述 val df1 spark.read.json("src/m…

微軟Data Formulator:用AI重塑數據可視化的未來

在數據驅動的時代,如何快速將復雜數據轉化為直觀的圖表是每個分析師面臨的挑戰。微軟研究院推出的開源工具 Data Formulator,通過結合AI與交互式界面,重新定義了數據可視化的工作流。本文將深入解析這一工具的核心功能、安裝方法及使用技巧,助你輕松駕馭數據之美。 一、Dat…

20分鐘上手DeepSeek開發:SpringBoot + Vue2快速構建AI對話系統

20分鐘上手DeepSeek開發&#xff1a;SpringBoot Vue2快速構建AI對話系統 前言 在生成式AI技術蓬勃發展的今天&#xff0c;大語言模型已成為企業智能化轉型和個人效率提升的核心驅動力。作為國產大模型的優秀代表&#xff0c;DeepSeek憑借其卓越的中文語義理解能力和開發者友…

神經網絡中層與層之間的關聯

目錄 1. 層與層之間的核心關聯&#xff1a;數據流動與參數傳遞 1.1 數據流動&#xff08;Forward Propagation&#xff09; 1.2 參數傳遞&#xff08;Backward Propagation&#xff09; 2. 常見層與層之間的關聯模式 2.1 典型全連接網絡&#xff08;如手寫數字分類&#xf…

本地部署deepseek-r1建立向量知識庫和知識庫檢索實踐【代碼】

目錄 一、本地部署DS 二、建立本地知識庫 1.安裝python和必要的庫 2.設置主目錄工作區 3.編寫文檔解析腳本 4.構建向量數據庫 三、基于DS,使用本地知識庫檢索 本地部署DS,其實非常簡單,我寫了一篇操作記錄,我終于本地部署了DeepSeek-R1(圖文全過程)-CSDN博客 安裝…

String、StringBuffer、StringBuiler的區別

可變性 String是不可變的&#xff0c;這是因為String內部用于存儲數據的char[]數組用了final關鍵字修飾&#xff0c;而且是private的&#xff0c;并且沒有對外提供修改數組的方法。 StringBuffer和StringBuilder是可變的&#xff0c;它們內部的char數組沒有用final關鍵字修飾。…

Certd自動化申請和部署SSL證書并配置https

服務器使用的華為云&#xff0c;之前SSL證書通過配置Cloudflare的DNS實現的&#xff0c;最近華為云備案提示需修改解析至境內華為云IP&#xff0c;若解析境外IP&#xff0c;域名無需備案&#xff0c;需注銷或取消接入備案信息&#xff0c;改為使用Certd自搭建證書管理工具&…

git tag以及git

git tag 以及git 一、先說收獲吧 1. git bash 在windows上 類似于linux的bash提供的shell命令行窗口&#xff0c;可以執行很多linux命令&#xff0c;cd pwd ls vim cat touch mkdir&#xff0c;還可以用正則匹配查看標簽。相當于在windows上裝了一個小的linux。git init myproj…

ESP8266通過AT指令配置雙向透傳

一、固件燒錄 IO0接地后上電&#xff0c;進入燒錄模式&#xff0c;燒錄完成后去掉即可 二、參數配置 1、服務器端 ATCWMODE_DEF2 ATCWSAP_DEF"ESP8266","12345678",5,3 ATSAVETRANSLINK1,"192.168.4.2",9090,"UDP",8080 2、客戶端…

【3D模型】【游戲開發】【Blender】Blender模型分享-獅頭木雕附導入方法

導入方法&#xff1a; [Blender] 如何導入包含紋理的 .blend 模型文件 在 3D 建模和渲染工作中&#xff0c;Blender 是一款功能強大的免費開源軟件。很多時候&#xff0c;我們需要導入 .blend 后綴的模型文件&#xff0c;同時確保紋理&#xff08;textures&#xff09;文件夾…

C# | 超簡單CSV表格讀寫操作(輕松將數據保存到CSV,并支持讀取還原)

C# | 超簡單CSV表格讀寫操作&#xff08;輕松將數據保存到CSV&#xff0c;并支持讀取還原&#xff09; 文章目錄 C# | 超簡單CSV表格讀寫操作&#xff08;輕松將數據保存到CSV&#xff0c;并支持讀取還原&#xff09;一、上位機開發中的CSV應用背景二、CSV讀寫實戰教學1. 基本對…

Git push后撤銷提交

一、介紹 當某次更改完工程后&#xff0c;push了本地倉庫到云端&#xff0c;但是發現有地方改錯了&#xff0c;想撤銷這次推送&#xff0c;或者某次提交就更改了很小一部分&#xff0c;想和本地這次修改的合并為一次推送&#xff0c;省的在云端顯示特別多次提交&#xff0c;顯得…

Unity導出WebGL,無法顯示中文

問題&#xff1a;中文無法顯示 默認字體無法顯示中文 在編輯器中設置了中文和英文的按鈕&#xff0c;中文按鈕無法顯示 導出后無法顯示中文 解決辦法&#xff1a; 自己添加字體&#xff0c;導入項目&#xff0c;并引用 示例 下載一個字體文件&#xff0c;這里使用的阿里…