> 技术文档 > Redis数据类型超全解析:5大核心+4种高级,一文搞定数据结构选型

Redis数据类型超全解析:5大核心+4种高级,一文搞定数据结构选型


💡 一句话总结:Redis的9种数据类型就像\"瑞士军刀🔪\"——不同业务场景选对工具,性能提升10倍!


一、为什么Redis数据类型如此重要?

真实案例:某电商平台误用List存储购物车,结果:

  • 读取性能:1秒 → 0.1秒 ✅
  • 内存占用:500MB → 80MB ✅
  • 代码复杂度:200行 → 30行 ✅

核心原理:

Redis直接在内存中定制化数据结构,比通用数据库快100倍!


二、五大核心数据类型详解

🧵 1. String(字符串):万能的\"小纸条\"

场景:缓存验证码、计数器、小文件存储
内存结构:

#mermaid-svg-zJCAf4gEeePu3XlF {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-zJCAf4gEeePu3XlF .error-icon{fill:#552222;}#mermaid-svg-zJCAf4gEeePu3XlF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-zJCAf4gEeePu3XlF .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-zJCAf4gEeePu3XlF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-zJCAf4gEeePu3XlF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-zJCAf4gEeePu3XlF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-zJCAf4gEeePu3XlF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-zJCAf4gEeePu3XlF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-zJCAf4gEeePu3XlF .marker.cross{stroke:#333333;}#mermaid-svg-zJCAf4gEeePu3XlF svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-zJCAf4gEeePu3XlF .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-zJCAf4gEeePu3XlF .cluster-label text{fill:#333;}#mermaid-svg-zJCAf4gEeePu3XlF .cluster-label span{color:#333;}#mermaid-svg-zJCAf4gEeePu3XlF .label text,#mermaid-svg-zJCAf4gEeePu3XlF span{fill:#333;color:#333;}#mermaid-svg-zJCAf4gEeePu3XlF .node rect,#mermaid-svg-zJCAf4gEeePu3XlF .node circle,#mermaid-svg-zJCAf4gEeePu3XlF .node ellipse,#mermaid-svg-zJCAf4gEeePu3XlF .node polygon,#mermaid-svg-zJCAf4gEeePu3XlF .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-zJCAf4gEeePu3XlF .node .label{text-align:center;}#mermaid-svg-zJCAf4gEeePu3XlF .node.clickable{cursor:pointer;}#mermaid-svg-zJCAf4gEeePu3XlF .arrowheadPath{fill:#333333;}#mermaid-svg-zJCAf4gEeePu3XlF .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-zJCAf4gEeePu3XlF .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-zJCAf4gEeePu3XlF .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-zJCAf4gEeePu3XlF .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-zJCAf4gEeePu3XlF .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-zJCAf4gEeePu3XlF .cluster text{fill:#333;}#mermaid-svg-zJCAf4gEeePu3XlF .cluster span{color:#333;}#mermaid-svg-zJCAf4gEeePu3XlF div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-zJCAf4gEeePu3XlF :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}键简单动态字符串SDSuser:1001:name42

优势:

  • 预分配内存(减少碎片)
  • 存储任意二进制数据(如图片base64)

代码操作:

SET user:1001:name \"张三\" # 存字符串 INCR user:1001:visits # 自增计数器 → 43 SETNX lock:order true # 分布式锁(不存在才设置) 

📃 2. List(列表):可双端操作的\"任务清单\"

场景:消息队列、最新消息、粉丝列表
内存结构:

#mermaid-svg-osoD1eV329Q3JKiS {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-osoD1eV329Q3JKiS .error-icon{fill:#552222;}#mermaid-svg-osoD1eV329Q3JKiS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-osoD1eV329Q3JKiS .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-osoD1eV329Q3JKiS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-osoD1eV329Q3JKiS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-osoD1eV329Q3JKiS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-osoD1eV329Q3JKiS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-osoD1eV329Q3JKiS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-osoD1eV329Q3JKiS .marker.cross{stroke:#333333;}#mermaid-svg-osoD1eV329Q3JKiS svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-osoD1eV329Q3JKiS .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-osoD1eV329Q3JKiS .cluster-label text{fill:#333;}#mermaid-svg-osoD1eV329Q3JKiS .cluster-label span{color:#333;}#mermaid-svg-osoD1eV329Q3JKiS .label text,#mermaid-svg-osoD1eV329Q3JKiS span{fill:#333;color:#333;}#mermaid-svg-osoD1eV329Q3JKiS .node rect,#mermaid-svg-osoD1eV329Q3JKiS .node circle,#mermaid-svg-osoD1eV329Q3JKiS .node ellipse,#mermaid-svg-osoD1eV329Q3JKiS .node polygon,#mermaid-svg-osoD1eV329Q3JKiS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-osoD1eV329Q3JKiS .node .label{text-align:center;}#mermaid-svg-osoD1eV329Q3JKiS .node.clickable{cursor:pointer;}#mermaid-svg-osoD1eV329Q3JKiS .arrowheadPath{fill:#333333;}#mermaid-svg-osoD1eV329Q3JKiS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-osoD1eV329Q3JKiS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-osoD1eV329Q3JKiS .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-osoD1eV329Q3JKiS .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-osoD1eV329Q3JKiS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-osoD1eV329Q3JKiS .cluster text{fill:#333;}#mermaid-svg-osoD1eV329Q3JKiS .cluster span{color:#333;}#mermaid-svg-osoD1eV329Q3JKiS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-osoD1eV329Q3JKiS :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}键双向链表任务1任务2任务3

特性:

  • 左右双端操作(LPUSH/RPOP)
  • 元素可重复

实战代码:

# 最新10条微博 LPUSH weibo:list \"微博内容5\" # 左侧插入 LTRIM weibo:list 0 9 # 只保留10条 # 阻塞队列 BRPOP order_queue 30 # 30秒内等待任务 

🧺 3. Hash(哈希表):字段独立的\"档案袋\"

场景:用户资料、商品属性、配置项
内存结构:

#mermaid-svg-BtfsZ4iX6fQO401N {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BtfsZ4iX6fQO401N .error-icon{fill:#552222;}#mermaid-svg-BtfsZ4iX6fQO401N .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BtfsZ4iX6fQO401N .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-BtfsZ4iX6fQO401N .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BtfsZ4iX6fQO401N .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BtfsZ4iX6fQO401N .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BtfsZ4iX6fQO401N .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BtfsZ4iX6fQO401N .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BtfsZ4iX6fQO401N .marker.cross{stroke:#333333;}#mermaid-svg-BtfsZ4iX6fQO401N svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BtfsZ4iX6fQO401N .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-BtfsZ4iX6fQO401N .cluster-label text{fill:#333;}#mermaid-svg-BtfsZ4iX6fQO401N .cluster-label span{color:#333;}#mermaid-svg-BtfsZ4iX6fQO401N .label text,#mermaid-svg-BtfsZ4iX6fQO401N span{fill:#333;color:#333;}#mermaid-svg-BtfsZ4iX6fQO401N .node rect,#mermaid-svg-BtfsZ4iX6fQO401N .node circle,#mermaid-svg-BtfsZ4iX6fQO401N .node ellipse,#mermaid-svg-BtfsZ4iX6fQO401N .node polygon,#mermaid-svg-BtfsZ4iX6fQO401N .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-BtfsZ4iX6fQO401N .node .label{text-align:center;}#mermaid-svg-BtfsZ4iX6fQO401N .node.clickable{cursor:pointer;}#mermaid-svg-BtfsZ4iX6fQO401N .arrowheadPath{fill:#333333;}#mermaid-svg-BtfsZ4iX6fQO401N .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-BtfsZ4iX6fQO401N .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-BtfsZ4iX6fQO401N .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-BtfsZ4iX6fQO401N .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-BtfsZ4iX6fQO401N .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-BtfsZ4iX6fQO401N .cluster text{fill:#333;}#mermaid-svg-BtfsZ4iX6fQO401N .cluster span{color:#333;}#mermaid-svg-BtfsZ4iX6fQO401N div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-BtfsZ4iX6fQO401N :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}fieldvaluefieldvalueuser:1001field-value映射name张三age28

优势:

  • 字段级读写(避免全量存取)
  • 内存优化(ziplist压缩存储)

操作示例:

HSET user:1001 name \"张三\" age 28 # 设置多个字段 HINCRBY user:1001 age 1  # 年龄+1 → 29 HGETALL user:1001  # 获取所有字段 

🎯 4. Set(集合):去重利器\"指纹库\"

场景:共同好友、抽奖白名单、标签系统
内存结构:

#mermaid-svg-pGIwiKeNRc4lvmFt {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pGIwiKeNRc4lvmFt .error-icon{fill:#552222;}#mermaid-svg-pGIwiKeNRc4lvmFt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-pGIwiKeNRc4lvmFt .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-pGIwiKeNRc4lvmFt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-pGIwiKeNRc4lvmFt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-pGIwiKeNRc4lvmFt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-pGIwiKeNRc4lvmFt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-pGIwiKeNRc4lvmFt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-pGIwiKeNRc4lvmFt .marker.cross{stroke:#333333;}#mermaid-svg-pGIwiKeNRc4lvmFt svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-pGIwiKeNRc4lvmFt .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-pGIwiKeNRc4lvmFt .cluster-label text{fill:#333;}#mermaid-svg-pGIwiKeNRc4lvmFt .cluster-label span{color:#333;}#mermaid-svg-pGIwiKeNRc4lvmFt .label text,#mermaid-svg-pGIwiKeNRc4lvmFt span{fill:#333;color:#333;}#mermaid-svg-pGIwiKeNRc4lvmFt .node rect,#mermaid-svg-pGIwiKeNRc4lvmFt .node circle,#mermaid-svg-pGIwiKeNRc4lvmFt .node ellipse,#mermaid-svg-pGIwiKeNRc4lvmFt .node polygon,#mermaid-svg-pGIwiKeNRc4lvmFt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-pGIwiKeNRc4lvmFt .node .label{text-align:center;}#mermaid-svg-pGIwiKeNRc4lvmFt .node.clickable{cursor:pointer;}#mermaid-svg-pGIwiKeNRc4lvmFt .arrowheadPath{fill:#333333;}#mermaid-svg-pGIwiKeNRc4lvmFt .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-pGIwiKeNRc4lvmFt .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-pGIwiKeNRc4lvmFt .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-pGIwiKeNRc4lvmFt .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-pGIwiKeNRc4lvmFt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-pGIwiKeNRc4lvmFt .cluster text{fill:#333;}#mermaid-svg-pGIwiKeNRc4lvmFt .cluster span{color:#333;}#mermaid-svg-pGIwiKeNRc4lvmFt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-pGIwiKeNRc4lvmFt :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}键哈希表用户ID1用户ID2用户ID3

特性:

  • 元素唯一性
  • 支持交并差集运算

实战应用:

SADD lottery:2024 user1001 user1002 # 添加抽奖用户 SISMEMBER lottery:2024 user1001 # 检查是否参与 → 1 SINTER friend:Alice friend:Bob # 求Alice和Bob的共同好友 

🏆 5. Sorted Set(有序集合):带排名的\"光荣榜\"

场景:实时排行榜、延迟队列、带权重任务
内存结构:

#mermaid-svg-1Llu7HBFthwEVCPt {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1Llu7HBFthwEVCPt .error-icon{fill:#552222;}#mermaid-svg-1Llu7HBFthwEVCPt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1Llu7HBFthwEVCPt .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-1Llu7HBFthwEVCPt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1Llu7HBFthwEVCPt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1Llu7HBFthwEVCPt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1Llu7HBFthwEVCPt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1Llu7HBFthwEVCPt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1Llu7HBFthwEVCPt .marker.cross{stroke:#333333;}#mermaid-svg-1Llu7HBFthwEVCPt svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1Llu7HBFthwEVCPt .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1Llu7HBFthwEVCPt .cluster-label text{fill:#333;}#mermaid-svg-1Llu7HBFthwEVCPt .cluster-label span{color:#333;}#mermaid-svg-1Llu7HBFthwEVCPt .label text,#mermaid-svg-1Llu7HBFthwEVCPt span{fill:#333;color:#333;}#mermaid-svg-1Llu7HBFthwEVCPt .node rect,#mermaid-svg-1Llu7HBFthwEVCPt .node circle,#mermaid-svg-1Llu7HBFthwEVCPt .node ellipse,#mermaid-svg-1Llu7HBFthwEVCPt .node polygon,#mermaid-svg-1Llu7HBFthwEVCPt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1Llu7HBFthwEVCPt .node .label{text-align:center;}#mermaid-svg-1Llu7HBFthwEVCPt .node.clickable{cursor:pointer;}#mermaid-svg-1Llu7HBFthwEVCPt .arrowheadPath{fill:#333333;}#mermaid-svg-1Llu7HBFthwEVCPt .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1Llu7HBFthwEVCPt .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1Llu7HBFthwEVCPt .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-1Llu7HBFthwEVCPt .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-1Llu7HBFthwEVCPt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1Llu7HBFthwEVCPt .cluster text{fill:#333;}#mermaid-svg-1Llu7HBFthwEVCPt .cluster span{color:#333;}#mermaid-svg-1Llu7HBFthwEVCPt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1Llu7HBFthwEVCPt :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}键跳跃表成员A, 分:100成员B, 分:85成员C, 分:92

核心优势:

  • 元素按分值排序
  • O(logN)复杂度读写

代码演示:

// 游戏排行榜 jedis.zadd(\"leaderboard\", 3500, \"player1\"); jedis.zincrby(\"leaderboard\", 500, \"player2\"); // 取TOP3 Set<Tuple> top3 = jedis.zrevrangeWithScores(\"leaderboard\", 0, 2); 

三、四大高级数据类型精讲

🔍 1. Bitmaps(位图):超省空间的\"开关墙\"

场景:用户签到、特征标志、布隆过滤器
内存节省:

Redis数据类型超全解析:5大核心+4种高级,一文搞定数据结构选型

操作示例:

SETBIT sign:202405 1001 1 # 用户1001在5月1日签到 BITCOUNT sign:202405 # 统计当月签到人数 BITOP OR total_sign sign:202405 sign:202406 # 合并两个月签到 

📊 2. HyperLogLog:亿级去重的\"估算器\"

场景:UV统计、大规模去重
精度对比:

数据量 实际值 HyperLogLog 误差率 100万 998,423 997,851 0.12% 1亿 99,876,123 99,901,238 0.025%

使用方式:

PFADD uv:20240501 user1 user2 user3 PFCOUNT uv:20240501 # → 3 PFMERGE uv:202405_total uv:20240501 uv:20240502 

📍 3. GEO(地理信息):LBS服务的\"导航仪\"

场景:附近的人、店铺定位、配送距离
底层原理:基于Sorted Set的Geohash编码

操作命令:

GEOADD shops 116.405285 39.904989 \"王府井店\" GEODIST shops \"王府井店\" \"西单店\" km # → 3.2 GEORADIUS shops 116.40 39.90 5 km WITHCOORD # 5公里内店铺 

🌊 4. Stream:日志流的\"磁带机\"

场景:消息队列、审计日志、事件溯源
架构图:

#mermaid-svg-MtremjGlgXLwfbac {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MtremjGlgXLwfbac .error-icon{fill:#552222;}#mermaid-svg-MtremjGlgXLwfbac .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-MtremjGlgXLwfbac .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-MtremjGlgXLwfbac .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-MtremjGlgXLwfbac .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-MtremjGlgXLwfbac .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-MtremjGlgXLwfbac .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-MtremjGlgXLwfbac .marker{fill:#333333;stroke:#333333;}#mermaid-svg-MtremjGlgXLwfbac .marker.cross{stroke:#333333;}#mermaid-svg-MtremjGlgXLwfbac svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-MtremjGlgXLwfbac .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-MtremjGlgXLwfbac .cluster-label text{fill:#333;}#mermaid-svg-MtremjGlgXLwfbac .cluster-label span{color:#333;}#mermaid-svg-MtremjGlgXLwfbac .label text,#mermaid-svg-MtremjGlgXLwfbac span{fill:#333;color:#333;}#mermaid-svg-MtremjGlgXLwfbac .node rect,#mermaid-svg-MtremjGlgXLwfbac .node circle,#mermaid-svg-MtremjGlgXLwfbac .node ellipse,#mermaid-svg-MtremjGlgXLwfbac .node polygon,#mermaid-svg-MtremjGlgXLwfbac .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-MtremjGlgXLwfbac .node .label{text-align:center;}#mermaid-svg-MtremjGlgXLwfbac .node.clickable{cursor:pointer;}#mermaid-svg-MtremjGlgXLwfbac .arrowheadPath{fill:#333333;}#mermaid-svg-MtremjGlgXLwfbac .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-MtremjGlgXLwfbac .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-MtremjGlgXLwfbac .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-MtremjGlgXLwfbac .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-MtremjGlgXLwfbac .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-MtremjGlgXLwfbac .cluster text{fill:#333;}#mermaid-svg-MtremjGlgXLwfbac .cluster span{color:#333;}#mermaid-svg-MtremjGlgXLwfbac div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-MtremjGlgXLwfbac :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}XADD生产者Stream消费者组1消费者组2消费者A消费者B

代码示例:

# 生产者 XADD order_stream * product_id 1001 user_id 2001 # 消费者组 XGROUP CREATE order_stream order_group $ XREADGROUP GROUP order_group consumer1 COUNT 1 STREAMS order_stream > 

四、数据类型选型决策表

业务场景 推荐类型 切忌误用 原因说明 商品详情缓存 Hash String 字段独立更新省内存 消息队列 Stream/List Set 保证顺序性 每日签到 Bitmap String 内存节省95% 排行榜 Sorted Set List 天然排序+高效范围查询 共同好友 Set List 自动去重+集合运算 附近店铺 GEO Hash 内置距离计算API

五、底层数据结构揭秘(性能关键)

1. ziplist(压缩列表)

#mermaid-svg-9mvM0hDFCe0D2OdP {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9mvM0hDFCe0D2OdP .error-icon{fill:#552222;}#mermaid-svg-9mvM0hDFCe0D2OdP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9mvM0hDFCe0D2OdP .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-9mvM0hDFCe0D2OdP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9mvM0hDFCe0D2OdP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9mvM0hDFCe0D2OdP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9mvM0hDFCe0D2OdP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9mvM0hDFCe0D2OdP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9mvM0hDFCe0D2OdP .marker.cross{stroke:#333333;}#mermaid-svg-9mvM0hDFCe0D2OdP svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9mvM0hDFCe0D2OdP .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-9mvM0hDFCe0D2OdP .cluster-label text{fill:#333;}#mermaid-svg-9mvM0hDFCe0D2OdP .cluster-label span{color:#333;}#mermaid-svg-9mvM0hDFCe0D2OdP .label text,#mermaid-svg-9mvM0hDFCe0D2OdP span{fill:#333;color:#333;}#mermaid-svg-9mvM0hDFCe0D2OdP .node rect,#mermaid-svg-9mvM0hDFCe0D2OdP .node circle,#mermaid-svg-9mvM0hDFCe0D2OdP .node ellipse,#mermaid-svg-9mvM0hDFCe0D2OdP .node polygon,#mermaid-svg-9mvM0hDFCe0D2OdP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-9mvM0hDFCe0D2OdP .node .label{text-align:center;}#mermaid-svg-9mvM0hDFCe0D2OdP .node.clickable{cursor:pointer;}#mermaid-svg-9mvM0hDFCe0D2OdP .arrowheadPath{fill:#333333;}#mermaid-svg-9mvM0hDFCe0D2OdP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-9mvM0hDFCe0D2OdP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-9mvM0hDFCe0D2OdP .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-9mvM0hDFCe0D2OdP .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-9mvM0hDFCe0D2OdP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-9mvM0hDFCe0D2OdP .cluster text{fill:#333;}#mermaid-svg-9mvM0hDFCe0D2OdP .cluster span{color:#333;}#mermaid-svg-9mvM0hDFCe0D2OdP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-9mvM0hDFCe0D2OdP :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}zlbyteszltailzllenentry1entry2zlend

适用场景:小规模Hash/List
优势:

  • 内存连续分配
  • 无指针开销
2. quicklist(快速列表)

#mermaid-svg-taME79NdoAOj2A71 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-taME79NdoAOj2A71 .error-icon{fill:#552222;}#mermaid-svg-taME79NdoAOj2A71 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-taME79NdoAOj2A71 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-taME79NdoAOj2A71 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-taME79NdoAOj2A71 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-taME79NdoAOj2A71 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-taME79NdoAOj2A71 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-taME79NdoAOj2A71 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-taME79NdoAOj2A71 .marker.cross{stroke:#333333;}#mermaid-svg-taME79NdoAOj2A71 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-taME79NdoAOj2A71 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-taME79NdoAOj2A71 .cluster-label text{fill:#333;}#mermaid-svg-taME79NdoAOj2A71 .cluster-label span{color:#333;}#mermaid-svg-taME79NdoAOj2A71 .label text,#mermaid-svg-taME79NdoAOj2A71 span{fill:#333;color:#333;}#mermaid-svg-taME79NdoAOj2A71 .node rect,#mermaid-svg-taME79NdoAOj2A71 .node circle,#mermaid-svg-taME79NdoAOj2A71 .node ellipse,#mermaid-svg-taME79NdoAOj2A71 .node polygon,#mermaid-svg-taME79NdoAOj2A71 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-taME79NdoAOj2A71 .node .label{text-align:center;}#mermaid-svg-taME79NdoAOj2A71 .node.clickable{cursor:pointer;}#mermaid-svg-taME79NdoAOj2A71 .arrowheadPath{fill:#333333;}#mermaid-svg-taME79NdoAOj2A71 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-taME79NdoAOj2A71 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-taME79NdoAOj2A71 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-taME79NdoAOj2A71 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-taME79NdoAOj2A71 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-taME79NdoAOj2A71 .cluster text{fill:#333;}#mermaid-svg-taME79NdoAOj2A71 .cluster span{color:#333;}#mermaid-svg-taME79NdoAOj2A71 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-taME79NdoAOj2A71 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}链表头ziplist块ziplist块ziplist块

设计理念:链表 + ziplist 混合结构
优势:平衡内存和读写效率

3. 跳跃表 vs 平衡树
指标 跳跃表 红黑树 范围查询 O(logN) O(N) 插入删除 O(logN) O(logN) 实现复杂度 简单 复杂 内存占用 较高 较低

六、实战避坑指南

🚫 坑1:错误使用List存储大对象

错误示范:

LPUSH user:1001:images \"10MB_base64_data\" 

后果:阻塞其他请求!
解决方案:

  • 改用String分片存储
  • 或使用外部存储(如MinIO)
🚫 坑2:Hash字段无限增长

问题:

HMSET config:system setting1 value1 setting2 value2 ... # 1000+字段 

优化:

  • 拆分为多个Hash

  • 使用ziplist阈值优化:

    hash-max-ziplist-entries 512 # 字段数≤512用ziplist 
🚫 坑3:Sorted Set误存大对象

性能对比:

成员大小 写入QPS 内存占用(百万成员) 16字节 85,000 64MB 1KB 12,000 1.5GB 黄金法则:成员值≤64字节

七、总结:九种数据类型全景图

Redis数据类型超全解析:5大核心+4种高级,一文搞定数据结构选型

选型心法:

  1. 读写模式:随机访问→Hash,顺序访问→List/Stream
  2. 数据特性:需排序→Sorted Set,需去重→Set
  3. 规模大小:小数据→ziplist,大数据→分布式方案

🔥 终极口诀:

  • 缓存会话用String
  • 对象属性用Hash
  • 消息队列用Stream
  • 统计去重用HyperLogLog
  • 排行榜用Sorted Set

#Redis实战 #数据结构 #性能优化