下面是一份面向實戰的一頁通(Docker/雲原生場景同樣適用),聚焦 <span style="color:red">Redis 常用數據類型</span> 與 <span style="color:red">高頻命令</span>,示例可直接敲,解釋緊跟其後。💡
總覽對比表(vditor/Markdown 友好)
| 類型 | 核心特性 | 典型場景 | 複雜度要點 |
|---|---|---|---|
| String | 二進制安全,支持自增 | 計數器、緩存對象 | GET/SET O(1),INCR O(1) |
| Hash | 鍵-字段-值 | 用户畫像、配置項 | HGET/HSET O(1) |
| List | 雙端鏈表 | 隊列、消息緩衝 | LPUSH/BRPOP O(1) |
| Set | 去重無序 | 標籤、去重 | SADD/SCARD O(1) |
| ZSet | 有序集合(分值) | 排行榜、延時隊列 | ZADD O(logN),範圍 O(logN+M) |
| Bitmap | 位級別布爾 | 簽到、活躍度位圖 | SETBIT/GETBIT O(1) |
| HyperLogLog | 基數估計 | UV/去重數 | PFADD/PFCOUNT 近似 |
| Geo | 地理位置 | 附近檢索 | GEOADD/GEORADIUS* |
| Stream | 追加日誌/消費組 | 消息隊列 | XADD O(1),XREAD 阻塞讀 |
注:GEORADIUS在新版本以GEOSEARCH系列替代;範圍複雜度含返回量 M。
思維導圖(文字版)
Redis
├─ String → 計數/緩存/分佈式鎖
├─ Hash → 用户信息/配置
├─ List → 隊列/時間序列緩衝
├─ Set → 去重/標籤/關係
├─ ZSet → 排行/打分/延時
├─ Bitmap → 簽到/活躍位
├─ HLL → 近似UV
├─ Geo → 附近的人/店
└─ Stream → 多消費者消息
1)String
SET user:1:name "alice"
INCR pv:home
MGET user:1:name pv:home
解釋:SET 寫入字符串;INCR 原子自增計數;MGET 批量讀,<span style="color:red">O(1)</span> 適合高 QPS 計數器與簡單緩存。
2)Hash
HSET user:1 name "alice" age 28
HGETALL user:1
HINCRBY user:1 score 5
解釋:HSET 以字段維度存儲;HGETALL 拉取整張“小表”;HINCRBY 數值字段自增,適合<span style="color:red">用户畫像</span>與配置聚合。
3)List
LPUSH q:msg "m1" "m2"
BRPOP q:msg 5
LRANGE q:msg 0 10
解釋:LPUSH 左入隊;BRPOP 阻塞出隊(超時 5 秒);LRANGE 切片讀取。用於<span style="color:red">輕量隊列/緩衝</span>,消費者少時性價比高。
4)Set
SADD tag:vip 1001 1002
SISMEMBER tag:vip 1001
SINTER tag:vip tag:beta
解釋:SADD 去重寫入;SISMEMBER 判斷成員;SINTER 求交集,適合<span style="color:red">人羣圈選/去重</span>。
5)Sorted Set(ZSet)
ZADD rank:score 98 u1 87 u2
ZREVRANGE rank:score 0 9 WITHSCORES
ZINCRBY rank:score 5 u2
解釋:ZADD 按分值建索引;ZREVRANGE 取 Top N;ZINCRBY 動態加分,適合<span style="color:red">排行榜/打分/延時隊列</span>。
6)Bitmap
SETBIT sign:2025-10-01 1001 1
GETBIT sign:2025-10-01 1001
BITCOUNT sign:2025-10-01
解釋:位操作按用户ID映射位點;BITCOUNT 統計簽到數量,空間極省,適合<span style="color:red">億級布爾</span>場景。
7)HyperLogLog
PFADD uv:2025-10-14 u1 u2 u3
PFCOUNT uv:2025-10-14
解釋:以極小內存估算去重數(誤差≈0.81%),適合 <span style="color:red">UV/全站去重</span>。
8)Geo
GEOADD shop:xy 121.4737 31.2304 s1 113.2644 23.1291 s2
GEOSEARCH shop:xy FROMLONLAT 121.47 31.23 BYRADIUS 5 km ASC
解釋:GEOADD 存經緯度;GEOSEARCH 以座標+半徑檢索並按距離排序,適合<span style="color:red">附近的人/店</span>。
9)Stream(消息隊列)
XADD mq:order * uid 1001 amount 99
XGROUP CREATE mq:order g1 $ MKSTREAM
XREADGROUP GROUP g1 c1 COUNT 10 BLOCK 5000 STREAMS mq:order >
解釋:XADD 追加事件;XGROUP 創建消費組;XREADGROUP 組內消費並可阻塞,滿足<span style="color:red">多消費者</span>與回溯。
10)Key 管理與過期(必做)
SET sess:tk abc EX 1800 NX
TTL sess:tk
UNLINK big:key
解釋:EX 設定過期(秒),NX 確保只在不存在時寫入(常用於<span style="color:red">分佈式鎖/冪等</span>);UNLINK 異步刪除,減輕主線程阻塞。
性能與治理要點(可做即可贏)
- <span style="color:red">按類型選模型</span>:計數器用 String;TopN 用 ZSet;UV 用 HLL;簽到用 Bitmap。
- <span style="color:red">設置過期</span>:所有“會老化”的 Key 必須帶 TTL,避免內存慢泄漏。
- <span style="color:red">大 Key 管控</span>:用
MEMORY USAGE、SCAN巡檢;刪除用UNLINK。 - <span style="color:red">阻塞命令</span>:
BRPOP/XREAD使用合理超時與併發,避免線程飢餓。 - <span style="color:red">持久化與高可用</span>:AOF 開啓
appendfsync everysec,主從+哨兵或集羣保證可用性。
小結
用對數據結構,命中 O(1) 的“甜點區”,再配合 <span style="color:red">TTL、大 Key 治理、AOF+主從</span>,Redis 就能穩定地為你的業務“加速不翻車” 🚀。需要把上述命令打包成你的專項檢查清單或聯調腳本,我可以直接生成適配版。