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(位图):超省空间的\"开关墙\"
场景:用户签到、特征标志、布隆过滤器
内存节省:
操作示例:
SETBIT sign:202405 1001 1 # 用户1001在5月1日签到 BITCOUNT sign:202405 # 统计当月签到人数 BITOP OR total_sign sign:202405 sign:202406 # 合并两个月签到
📊 2. HyperLogLog:亿级去重的\"估算器\"
场景:UV统计、大规模去重
精度对比:
使用方式:
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 >
四、数据类型选型决策表
五、底层数据结构揭秘(性能关键)
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 平衡树
六、实战避坑指南
🚫 坑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误存大对象
性能对比:
七、总结:九种数据类型全景图
选型心法:
- 读写模式:随机访问→Hash,顺序访问→List/Stream
- 数据特性:需排序→Sorted Set,需去重→Set
- 规模大小:小数据→ziplist,大数据→分布式方案
🔥 终极口诀:
- 缓存会话用String
- 对象属性用Hash
- 消息队列用Stream
- 统计去重用HyperLogLog
- 排行榜用Sorted Set
#Redis实战 #数据结构 #性能优化