Redis 支持多種靈活的數據類型,每種類型針對特定場景優化。以下是 **Redis 最常用的 5 種數據類型**及其核心特點和應用場景:
1.?字符串(String)
- 描述:最基本的數據類型,可存儲文本、數字(整數/浮點數)或二進制數據(≤512MB)。
- 常用命令:
SET key value
:設置值GET key
:獲取值INCR key
:原子遞增(計數器)SETNX key value
:不存在時才設置(分布式鎖)
- 場景:
- 緩存(HTML片段、用戶信息)
- 計數器(訪問量、點贊數)
- 分布式鎖(
SETNX
)
2.?哈希(Hash)
- 描述:鍵值對集合,適合存儲?對象(如用戶信息)。
- 常用命令:
HSET key field value
:設置字段值HGET key field
:獲取字段值HGETALL key
:獲取所有字段和值HINCRBY key field increment
:遞增字段值
- 場景:
- 用戶資料存儲(key=用戶ID,field=姓名/年齡等)
- 商品屬性管理(key=商品ID,field=價格/庫存等)
- 優勢:可單獨操作字段,避免序列化整個對象。
3.?列表(List)
- 描述:按插入順序排序的?字符串列表,支持雙向操作。
- 常用命令:
LPUSH key value
:左側插入RPUSH key value
:右側插入LPOP key
:左側彈出LRANGE key start stop
:獲取范圍數據
- 場景:
- 消息隊列(
LPUSH
?+?BRPOP
?實現生產者-消費者) - 最新動態(如朋友圈時間線)
- 日志記錄(按時間順序存儲)
- 消息隊列(
4.?集合(Set)
- 描述:無序且唯一?的字符串集合,支持交并差運算。
- 常用命令:
SADD key member
:添加元素SMEMBERS key
:獲取所有元素SINTER key1 key2
:求交集SISMEMBER key member
:判斷元素是否存在
- 場景:
- 標簽系統(如文章標簽)
- 共同好友(
SINTER
?求交集) - 唯一性控制(如抽獎中獎用戶)
5.?有序集合(Sorted Set / Zset)
- 描述:帶?分數(score)?的集合,元素按分數排序(分數可重復,值唯一)。
- 常用命令:
ZADD key score member
:添加元素ZRANGE key start stop
:按排名范圍獲取ZRANGEBYSCORE key min max
:按分數范圍獲取ZRANK key member
:獲取排名
- 場景:
- 排行榜(如游戲分數排名)
- 延時隊列(分數=執行時間戳)
- 熱點數據排序(分數=訪問次數)
其他實用類型補充:
- 位圖(Bitmap):
通過位操作存儲布爾值(如用戶簽到記錄,SETBIT user:sign:2024 100 1
)。 - HyperLogLog:
超小內存統計去重計數(如UV統計,誤差率0.81%)。 - 地理空間(GEO):
存儲經緯度,計算距離(GEODIST
)、附近位置(GEORADIUS
)。 - 流(Stream)(Redis 5.0+):
持久化消息隊列,支持消費者組(類似Kafka)。
選擇數據類型的關鍵原則:
- 數據結構匹配:存儲對象用 Hash,排序用 Zset,去重用 Set。
- 操作效率:Zset 按分數范圍查詢復雜度 O(log N),Hash 單字段操作 O(1)。
- 內存優化:小對象用 String,大對象用 Hash 分字段存儲。
💡?示例場景對比:
- 用戶信息存儲:
- ? 錯誤:用 String 存儲整個 JSON(修改需全量讀寫)
- ? 正確:用 Hash 分字段存儲(可單獨更新年齡)
- 排行榜:
- ? 錯誤:用 List + 手動排序
- ? 正確:用 Zset 自動按分數排序
掌握這些類型及其適用場景,能極大提升 Redis 使用效率!