Redis 支持五種核心數據類型,每種類型都有特定的應用場景和命令集,以下是詳細分類説明:
- String(字符串)
應用場景:存儲簡單值(如計數器、緩存數據)
常用命令:
SET key value:設置鍵值對
GET key:獲取值
SET mykey "Hello" # 設置鍵值
GET mykey # 返回"Hello"
INCR/DECR:對整數值自增1或自減1,若key不存在則初始化為0後操作
SET counter 10
INCR counter #返回11(自增1)
DECR counter #返回10(自減1)
INCRBY/DECRBY:按指定步長增減整數值
SET inventory 50
INCRBY inventory 5 # 返回55(增加5)
DECRBY inventory 8 # 返回47(減少8)
INCRBYFLOAT:對浮點數值增減指定浮點數
SET temperature 36.5
INCRBYFLOAT temperature 0.7 # 返回37.2(增加0.7)
INCRBYFLOAT temperature -1.2 # 返回36.0(減少1.2)
APPEND key value:追加字符串
APPEND
SET greeting "Hello"
APPEND greeting " World" # 值變為"Hello World"
不存在的key會自動創建
APPEND new_key “Redis” # 創建新鍵並設置值為"Redis"
二進制安全示例
SET binary_data “\x00\x01”
APPEND binary_data “\x02\x03” # 可追加二進制數據
STRLEN key:獲取字符串長度
常規字符串
SET message “Redis”
STRLEN message # 返回5(字節數)
中文處理(UTF-8編碼)
SET chinese “中文”
STRLEN chinese # 返回6(每個中文佔3字節)
空鍵處理
STRLEN non_existent_key # 返回0
- Hash(哈希)
應用場景:存儲對象(如用户信息)
常用命令:
HSET key field value:設置哈希表中字段值,若字段存在則覆蓋
HSET user:1001 name "Alice" # 返回1(新建字段)
HSET user:1001 age 25 # 返回1(新建字段)
HSET user:1001 name "Bob" # 返回0(覆蓋舊值)
HGET key field:獲取字段值
HGET user:1001 name # 返回"Bob"
HGET user:1001 email # 返回nil(字段不存在)
HGETALL key:獲取所有字段和值(大數據量慎用)
HGETALL user:1001 # 返回["name","Bob","age","27"]
HDEL key field:刪除指定字段
HDEL user:1001 age # 返回1(刪除成功)
HEXISTS 檢查字段是否存在
HEXISTS user:1001 name # 返回1(存在)
- List(列表)
應用場景:有序集合(如消息隊列)
常用命令:
LPUSH key value:左側插入元素
RPUSH key value:右側插入元素
LPUSH mylist "A" # 左側插入"A",列表變為["A"]
LPUSH mylist "B" "C" # 左側批量插入,列表變為["C","B","A"]
RPUSH mylist "D" # 右側插入"D",列表變為["C","B","A","D"]
LRANGE key start stop:獲取範圍元素
LRANGE mylist 0 -1 # 獲取全部元素,返回["C","B","A","D"]
LRANGE mylist 1 2 # 獲取索引1-2的元素,返回["B","A"]
LPOP key:移除並獲取左側元素
LPOP mylist # 移除並返回左側第一個元素"C",列表變為["B","A","D"]
RPOP mylist # 移除並返回右側第一個元素"D",列表變為["B","A"]
LLEN key:獲取列表長度
LLEN mylist # 返回當前列表長度2
- Set(集合)
應用場景:無序唯一集合(如標籤系統)
常用命令:
SADD key member [member…]:添加成員
SMEMBERS key:獲取所有成員
SISMEMBER key member:判斷成員是否存在
SUNION key1 key2:並集運算
典型應用場景
- 標籤系統
SADD article:123:tags "tech" "database"
SADD user:456:interests "tech"
SINTER article:123:tags user:456:interests # 查找共同標籤
- 好友關係
SADD user:100:friends "200" "300"
SISMEMBER user:100:friends "200" # 檢查是否為好友
- 數據去重
SADD unique_visitors "192.168.1.1"
SCARD unique_visitors # 獲取獨立訪客數
- 內容推薦
SUNION user:100:history user:200:history # 合併瀏覽記錄生成推薦池
- (Sorted Set/Zset)有序集合
應用場景:帶權重的有序數據(如排行榜)
常用命令:
- 添加元素(ZADD)
向有序集合添加元素或更新分數
格式:ZADD key [NX|XX] [CH] [INCR] score member
特性:NX僅添加新成員,XX僅更新現有成員,CH返回變更成員數,INCR實現分數遞增
ZADD myzset 1 "one" 2 "two" 3 "three" # 添加三個成員
ZADD myzset NX 4 "four" # 僅當"four"不存在時添加
ZADD myzset XX CH 2.5 "two" # 僅更新已存在的"two"分數並返回修改計數:ml-citation{ref="1,2" data="citationList"}
二、範圍查詢命令
ZRANGE:按索引升序獲取成員
格式:ZRANGE key start stop [WITHSCORES]
示例:
ZRANGE myzset 0 -1 獲取全部成員
ZREVRANGE:按索引降序獲取成員
格式:ZREVRANGE key start stop [WITHSCORES]
與ZRANGE排序方向相反
ZRANGE myzset 0 -1 WITHSCORES # 返回全部成員及分數(升序)
ZREVRANGE myzset 0 1 # 返回分數最高的兩個成員(降序):ml-citation{ref="1,2" data="citationList"}
ZRANGEBYSCORE:按分數範圍查詢(升序)
格式:ZRANGEBYSCORE key min max [WITHSCORES]
支持-inf和+inf表示無限範圍
ZRANGEBYSCORE myzset 1 3 # 返回分數1≤score≤3的成員
ZRANGEBYSCORE myzset (2 +INF LIMIT 1 2 # 返回分數>2的前兩個成員:ml-citation{ref="2,9" data="citationList"}
ZREVRANGEBYSCORE:按分數範圍降序查詢
格式:ZREVRANGEBYSCORE key max min [WITHSCORES]
參數min/max位置與升序版本相反
三、排名與統計命令
ZRANK/ZREVRANK:獲取成員排名
格式:ZRANK key member(升序)
ZREVRANK key member(降序)
返回:成員排名(從0開始)
ZCOUNT:統計分數區間內成員數
格式:ZCOUNT key min max
示例:
ZCOUNT myzset 10 20
ZRANK myzset "two" # 返回"two"的升序排名(從0開始)
ZSCORE myzset "three" # 返回"three"的分數:ml-citation{ref="7,8" data="citationList"}
ZINCRBY:增減成員分數
格式:ZINCRBY key increment member
特性:若成員不存在則自動添加
ZINCRBY myzset 0.5 "two" # 將"two"的分數增加0.5:ml-citation{ref="2,8" data="citationList"}
四、刪除操作命令
ZREM:刪除指定成員
格式:ZREM key member [member …]
返回:成功刪除的成員數
ZREM myzset "one" # 刪除指定成員
ZPOPMAX myzset 2 # 刪除並返回分數最高的2個成員:ml-citation{ref="2,7" data="citationList"}
ZREMRANGEBYRANK:按排名區間刪除
格式:ZREMRANGEBYRANK key start stop
示例:刪除排名1-3的成員
ZREMRANGEBYSCORE:按分數區間刪除
格式:ZREMRANGEBYSCORE key min max
支持開區間(如(10表示大於10)