Redis 支持五種核心數據類型,每種類型都有特定的應用場景和命令集,以下是詳細分類説明:

  1. 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

  1. 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(存在)
  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
  1. Set(集合)

應用場景:無序唯一集合(如標籤系統)

常用命令:

SADD key member [member…]:添加成員

SMEMBERS key:獲取所有成員

SISMEMBER key member:判斷成員是否存在

SUNION key1 key2:並集運算

典型應用場景

  1. 標籤系統
SADD article:123:tags "tech" "database"
SADD user:456:interests "tech"
SINTER article:123:tags user:456:interests  # 查找共同標籤
  1. 好友關係
SADD user:100:friends "200" "300"
SISMEMBER user:100:friends "200"  # 檢查是否為好友
  1. 數據去重
SADD unique_visitors "192.168.1.1"
SCARD unique_visitors  # 獲取獨立訪客數
  1. 內容推薦
SUNION user:100:history user:200:history  # 合併瀏覽記錄生成推薦池
  1. (Sorted Set/Zset)有序集合

應用場景:帶權重的有序數據(如排行榜)

常用命令:

  1. 添加元素(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)