【Redis】第2節|Redis基本數據類型

一、基礎數據結構

1. String(字符串)
  • 特點:二進制安全,支持字符串、數值存儲,原子性操作。
  • 核心操作
SET key value         # 存儲鍵值對
GET key               # 獲取值
INCR key              # 數值自增1
SETEX key seconds val # 存儲帶過期時間的值
  • 應用場景
    • 單值緩存(如用戶余額:SET user:1:balance 1000)。
    • 分布式鎖(SET lock:order 1 NX EX 10)。
    • 計數器(如點贊數:INCR post:1:like)。
2. Hash(哈希表)
  • 特點:字段(field)與值(value)的映射,適合存儲對象。
  • 核心操作
HSET user:1 name "roy" balance 1888 # 存儲對象
HMGET user:1 name balance          # 批量獲取字段
HINCRBY user:1 balance 100          # 字段值自增
  • 應用場景
    • 結構化數據存儲(如用戶信息:HSET user:1 id 1 name "roy")。
    • 電商購物車(用戶ID為key,商品ID為field,數量為value)。
3. List(列表)
  • 特點:雙向鏈表,支持頭部/尾部快速操作,按索引訪問中間元素效率低。
  • 核心操作
LPUSH list:msgs "msg1" "msg2" # 左插入元素
RPOP list:msgs                # 右彈出元素
LRANGE list:msgs 0 -1         # 獲取所有元素
  • 應用場景
    • 消息隊列(LPUSH + RPOP實現隊列,LPUSH + LPOP實現棧)。
    • 排行榜滾動數據(如最近10條消息:LRANGE list:msgs 0 9)。
4. Set(集合)
  • 特點:無序、唯一元素,支持交集、并集、差集運算。
  • 核心操作
SADD set:users 1 2 3       # 添加元素
SMEMBERS set:users         # 獲取所有元素
SINTER set:A set:B         # 交集運算
  • 應用場景
    • 去重統計(如UV統計:SADD uv:202406 1 2 3SCARD uv:202406)。
    • 社交關系(共同關注:SINTER follow:user1 follow:user2)。
5. ZSet(有序集合)
  • 特點:元素關聯分值(score),按分值排序,支持范圍查詢。
  • 核心操作
ZADD rank:202406 100 "user1" 90 "user2" # 添加帶分值元素
ZREVRANGE rank:202406 0 9 WITHSCORES  # 倒序獲取前10名
ZINCRBY rank:202406 5 "user1"          # 分值自增
  • 應用場景
    • 排行榜(如成績排名、點贊排名)。
    • 時間線(按時間戳排序的動態列表)。

二、高級數據結構

1. Bitmap(位圖)
  • 特點:基于二進制位存儲,節省空間,適合統計狀態(如簽到、在線狀態)。
  • 核心操作
SETBIT sign:202406 1 1   # 用戶1在第1天簽到(offset從0開始)
GETBIT sign:202406 1     # 查詢簽到狀態
BITCOUNT sign:202406     # 統計總簽到次數
  • 應用場景
    • 每日簽到(SETBIT標記日期,BITCOUNT統計天數)。
    • 活躍用戶統計(按天標記在線狀態)。
2. HyperLogLog(基數統計)
  • 特點:近似統計不重復元素個數,內存占用固定(約12KB),存在誤差(<1%)。
  • 核心操作
PFADD hll:uv 1 2 3       # 添加元素
PFCOUNT hll:uv           # 統計UV數
PFMERGE hll:uv_week hll:uv_day1 hll:uv_day7 # 合并多日統計
  • 應用場景
    • 大規模UV統計(如網站日活、月活)。
3. Geo(地理空間索引)
  • 特點:存儲經緯度,支持距離計算、范圍查詢。
  • 核心操作
GEOADD cities 113.017 28.2 "Changsha" 120.15 30.2 "Hangzhou" # 添加地點
GEODIST cities "Changsha" "Hangzhou" KM # 計算距離(公里)
GEORADIUS cities 113 28 5 KM WITHCOORD # 查詢5公里內的地點并返回坐標
  • 應用場景
    • 附近推薦(如外賣商家、共享單車定位)。
4. Stream(流)
  • 特點:Redis實現的消息隊列,支持生產者-消費者模型,自動生成消息ID。
  • 核心操作
XADD stream:msg * user "roy" content "hello" # 添加消息(*自動生成ID)
XGROUP CREATE stream:msg group1 0           # 創建消費者組
XREADGROUP GROUP group1 consumer1 COUNT 10 STREAMS stream:msg > # 消費消息
  • 應用場景
    • 輕量級消息隊列(替代Kafka/RabbitMQ的簡單場景)。

三、數據結構選型指南

場景

推薦結構

理由

單值緩存

String

簡單高效,支持過期時間

對象存儲

Hash

字段結構化,節省內存

消息隊列

List/Stream

List實現簡單隊列,Stream支持消費者組

去重統計

Set

唯一元素特性

排行榜

ZSet

分值排序,范圍查詢高效

簽到統計

Bitmap

位操作節省空間

地理位置查詢

Geo

經緯度索引與距離計算

大規模UV統計

HyperLogLog

內存固定,適合億級數據

四、Spring Boot集成Redis

1. Maven依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 核心配置(application.properties
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=your-password
spring.redis.database=0  # 數據庫索引(默認0)
3. RedisTemplate配置(解決中文亂碼)
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);// 字符串序列化(解決key和value中文亂碼)StringRedisSerializer stringSerializer = new StringRedisSerializer();template.setKeySerializer(stringSerializer);template.setValueSerializer(stringSerializer);// Hash類型序列化template.setHashKeySerializer(stringSerializer);template.setHashValueSerializer(stringSerializer);return template;
}
4. 操作示例
@Autowired
private RedisTemplate<String, Object> redisTemplate;// String操作
redisTemplate.opsForValue().set("key", "value");
String value = (String) redisTemplate.opsForValue().get("key");// Hash操作
redisTemplate.opsForHash().put("user:1", "name", "roy");
String name = (String) redisTemplate.opsForHash().get("user:1", "name");

五、注意事項

  1. 大Key問題:避免單個Key存儲過多數據(如List超過百萬元素),影響性能。
  2. 內存優化:優先使用壓縮存儲結構(如Hash比String更節省空間)。
  3. 持久化策略:根據業務選擇RDB或AOF,避免數據丟失。
  4. 集群模式:分布式場景需考慮數據分片(如Hash Tag確保相關數據在同一節點)。

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

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

相關文章

用matlab提取abaqus odb文件中的節點信息

在MATLAB中提取Abaqus ODB文件中的節點信息&#xff0c;可以通過以下幾種方法實現&#xff1a; 方法1&#xff1a;使用MATLAB的ABAQUS Interface工具箱 https://wenku.csdn.net/answer/77axwtqnys 可以參考這個 MATLAB的ABAQUS Interface工具箱提供了直接讀取ODB文件的功能。…

【Java】異常處理

1.異常的概念 在程序運行時&#xff0c;打斷正常程序流程的不正常情況分兩類: 1.錯誤(Error)&#xff1a;應用程序無法捕獲的嚴重問題(自己無法處理) 例&#xff1a; 虛擬機相關的問題&#xff0c;如虛擬機崩潰、動態鏈接失敗、低層資源錯誤等 總是不受編譯器檢查的&#xff0…

Linux(Centos 7.6)命令詳解:tar

1.命令作用 命令tar將許多文件一起保存到單個磁帶或磁盤存檔中&#xff0c;并且可以從存檔中恢復單個文件(GNU tar saves many files together into a single tape or disk archive, and can restore individual files from the archive.)。 2.命令語法 Usage: tar [OPTION.…

企業網絡綜合實訓

企業網絡綜合實訓 任務描述&#xff1a; 公司的中心機房、辦公區一和辦公區二位于同一園區。要求各大樓之間要互通&#xff0c;并且均能訪問Internet&#xff1b;同時公司業務需要對外拓展&#xff0c;需要在Internet數據中心機房部署一臺對外提供DNS和Web站點服務的服務器。…

8天Python從入門到精通【itheima】-41~44

目錄 41節-while循環的嵌套應用 1.學習目標 2.while循環的偽代碼和生活情境中的應用 3.圖片應用的代碼案例 4.代碼實例【Patrick自己親手寫的】&#xff1a; 5.whlie嵌套循環的注意點 6.小節總結 42節-while循環的嵌套案例-九九乘法表 1.補充知識-print的不換行 2.補充…

探索Linux互斥:線程安全與資源共享

個人主頁&#xff1a;chian-ocean 文章專欄-Linux 前言&#xff1a; 互斥是并發編程中避免競爭條件和保護共享資源的核心技術。通過使用鎖或信號量等機制&#xff0c;能夠確保多線程或多進程環境下對共享資源的安全訪問&#xff0c;避免數據不一致、死鎖等問題。 競爭條件 競…

《Stable Diffusion 3.0企業級落地指南》——技術賦能與商業價值的深度融合實踐

Stable Diffusion 3.0&#xff08;SD3&#xff09;作為當前多模態生成式AI技術的集大成者&#xff0c;憑借其創新的擴散Transformer架構&#xff08;DiT&#xff09;、流匹配&#xff08;Flow Matching&#xff09;技術以及超分辨率生成能力&#xff0c;正在重塑企業內容生產的…

基于本地模型+多級校驗設計的高效緩存,有效節省token數量(有點雞肋doge)。

前言 我是基于token有限而考慮的一個省錢方案&#xff0c;還能夠快速返回結果&#xff0c;但是劣勢也很明顯&#xff0c;設計不好容易出問題&#xff0c;就如下面所介紹的語義飄逸和緩存污染&#xff0c;我認為在自己學習大模型的過程用來省錢非常可以&#xff0c;再加上學習過…

網絡安全全知識圖譜:威脅、防護、管理與發展趨勢詳解

1 網絡安全基礎概念 1.1 什么是網絡安全 網絡安全是指通過技術、管理和法律等手段&#xff0c;保護計算機網絡系統中的硬件、軟件及其系統中的數據&#xff0c;不因偶然的或者惡意的原因而遭受到破壞、更改、泄露&#xff0c;確保系統連續可靠正常地運行&#xff0c;網絡服務不…

遠控安全進階之戰:TeamViewer/ToDesk/向日葵設備安全策略對比

【作者主頁】Francek Chen 【文章摘要】在數字化時代&#xff0c;卓越的遠程控制軟件需兼顧功能與體驗&#xff0c;包括流暢連接、高清畫質、低門檻UI設計、毫秒級延遲及多功能性&#xff0c;同時要有獨樹一幟的遠控安全技術&#xff0c;通過前瞻性安全策略阻擋網絡風險&#x…

Steam發布游戲過程的若干問題

我沒有想到在Steam發布游戲的過程會比做游戲的過程更困難&#xff0c;更惡心。 注冊Steamworks 稅務采訪 稅務采訪部分填的地址要和后面它們要求你發證件照片里的地址一樣。護照里因為沒有地址不會通過&#xff0c;我用的駕照里面有地址。沒有駕照可以用身份證。 應用準備界…

開搞:第四個微信小程序:圖上縣志

原因&#xff1a;我換了一個微信號來搞&#xff0c;因為用同一個用戶&#xff0c;備案只能一個個的來。這樣不行。所以我換了一個。原來注冊過小程序。現在修改即可。注意做好計劃后&#xff0c;速度備案和審核&#xff0c;不然你時間浪費不起。30元花起。 結構&#xff1a; -…

第三十七天打卡

知識點回顧&#xff1a; 過擬合的判斷&#xff1a;測試集和訓練集同步打印指標模型的保存和加載 僅保存權重保存權重和模型保存全部信息checkpoint&#xff0c;還包含訓練狀態 早停策略 作業&#xff1a;對信貸數據集訓練后保存權重&#xff0c;加載權重后繼續訓練50輪&#x…

Java高頻面試之并發編程-21

hello啊&#xff0c;各位觀眾姥爺們&#xff01;&#xff01;&#xff01;本baby今天又來報道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面試官&#xff1a;詳細說說AQS AQS&#xff08;AbstractQueuedSynchronizer&#xff09;是 Java 并發包&#xff08;java.util.concurre…

按鍵狀態機

原工程地址&#xff1a;https://github.com/candylife9/state_machine_example 視頻&#xff1a;C語言之狀態機編程_02_狀態機使用案例分析_嗶哩嗶哩_bilibili 我覺得講的挺好的。 來自豆包封裝的通用接口 頭文件 /*** file key_state_machine.h* brief 通用按鍵狀態機接口…

華為OD機試真題——新學校選址(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

2025 A卷 100分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

歐拉操作系統下安裝hadoop集群

背景&#xff1a;歐拉操作系統下安裝CDH集群的時候&#xff0c;需要安裝python2.7.5&#xff0c;但是本身歐拉系統對python2的支持可能沒有那么好&#xff0c;所以考慮搭建原生的hadoop集群。 基礎環境如下 組件名稱組件版本歐拉VERSION“22.03 (LTS-SP4)”jdkopenjdk versio…

SQL語句的執行流程

文章目錄 一、執行流程二、建立連接三、預處理器四、解析器4.1 詞法分析4.2 語法分析4.3 語義分析 五、優化器六、執行器七、返回結果 一、執行流程 階段主要功能關鍵組件1. 建立連接身份驗證、權限檢查連接器2. 預處理器緩存檢查、SQL預處理查詢緩存3. 解析器詞法分析、語法分…

TiDB:從快速上手到核心原理與最佳實踐

文章目錄 引言第一部分&#xff1a;TiDB快速體驗與實踐指南1. TiDB概述2. TiDB部署方式2.1 本地測試環境部署2.2 生產環境部署2.3 Kubernetes部署2.4 云服務 3. TiDB基本操作3.1 連接TiDB3.2 數據庫和表操作3.3 分區表3.4 事務操作 4. 數據遷移到TiDB4.1 從MySQL遷移4.2 使用Ti…

總結:進程和線程的聯系和區別

前言:通過學習javaEE初階中的多線程章節后加上我自己的理解,想來總結一下線程和進程的聯系和區別. 一來是能更好地復習知識,二來是為了記錄我的學習路程,相信未來的我回首不會忘記這段難忘的經歷. 1.進程 先來談談進程:進程是操作系統中資源分配的基本單位. 1)進程的執行方…