Redis 作為高性能的鍵值存儲數據庫,提供了豐富的命令集,主要涵蓋 字符串 (String)、哈希 (Hash)、列表 (List)、集合 (Set)、有序集合 (ZSet)、鍵 (Keys)、Geo(地理位置)、HyperLogLog(基數統計)、Bitmap(位圖)、BitField(位操作)、Scan(迭代查詢)操作。
下面按照類別分類總結 Redis 的常用命令及其使用方式。
基本操作
1. Key(鍵)操作
命令 | 作用 |
---|---|
EXISTS key | 檢查 key 是否存在 |
DEL key [key ...] | 刪除一個或多個 key |
EXPIRE key seconds | 設置 key 的過期時間 |
TTL key | 查看 key 剩余的生存時間 |
RENAME key newkey | 修改 key 的名稱 |
TYPE key | 獲取 key 對應的 value 類型 |
KEYS pattern | 查找符合 pattern 規則的 key |
示例
SET name "redis"
EXPIRE name 10
TTL name
DEL name
2. 字符串 (String)
命令 | 說明 |
---|---|
SET key value | 設置指定 key 的值 |
GET key | 獲取指定 key 的值 |
GETSET key value | 設置新值并返回舊值 |
MGET key [key ...] | 同時獲取多個 key 的值 |
MSET key value [key value ...] | 同時設置多個 key 的值 |
MSETNX key value [key value ...] | 同時設置多個 key 的值(當所有 key 都不存在時才執行) |
SETNX key value | 當 key 不存在時,設置 key 的值 |
SETEX key seconds value | 設置 key 的值,并指定過期時間(秒) |
PSETEX key milliseconds value | 設置 key 的值,并指定過期時間(毫秒) |
STRLEN key | 返回 key 中字符串值的長度 |
APPEND key value | 追加 value 到 key 原有值的末尾 |
GETRANGE key start end | 獲取字符串指定區間內的子字符串(舊別名:SUBSTR) |
SETRANGE key offset value | 從指定偏移量開始,覆蓋寫入字符串 |
INCR key | 將 key 中存儲的數字加 1 |
INCRBY key increment | 將 key 中存儲的數字加上指定增量 |
INCRBYFLOAT key increment | 將 key 中存儲的浮點數加上指定增量 |
DECR key | 將 key 中存儲的數字減 1 |
DECRBY key decrement | 將 key 中存儲的數字減去指定減量 |
GETBIT key offset | 返回字符串中指定偏移量處的位值 |
SETBIT key offset value | 將字符串中指定偏移量處的位設置為 0 或 1 |
BITCOUNT key [start end] | 統計字符串中值為 1 的位數 |
BITOP operation destkey key [key ...] | 對一個或多個 key 進行位操作(AND、OR、XOR、NOT) |
BITPOS key bit [start] [end] | 查找字符串中第一個指定二進制位的位置 |
示例
SET username "Tom"
GET username
INCR count
DECR count
APPEND username " Smith"
STRLEN username
3. 哈希 (Hash)
命令 | 說明 |
---|---|
HSET key field value | 為哈希表中的字段賦值 |
HSETNX key field value | 僅當字段不存在時,為哈希表中的字段賦值 |
HMSET key field value [field value ...] | 同時為多個字段賦值(新版 Redis 建議使用 HSET 多參數形式) |
HGET key field | 獲取哈希表中指定字段的值 |
HMGET key field [field ...] | 獲取哈希表中多個字段的值 |
HDEL key field [field ...] | 刪除哈希表中一個或多個字段 |
HEXISTS key field | 檢查哈希表中是否存在指定字段 |
HLEN key | 返回哈希表中字段的數量 |
HKEYS key | 返回哈希表中所有的字段名稱 |
HVALS key | 返回哈希表中所有字段對應的值 |
HGETALL key | 返回哈希表中所有的字段和值 |
HINCRBY key field increment | 將哈希表中指定字段的整數值增加指定數值 |
HINCRBYFLOAT key field increment | 將哈希表中指定字段的浮點數值增加指定數值 |
HSTRLEN key field | 返回哈希表中指定字段對應的值的字符串長度 |
示例
HSET user:1001 name "Alice"
HGET user:1001 name
HGETALL user:1001
HDEL user:1001 name
4. 列表 (List)
命令 | 說明 |
---|---|
LPUSH key value [value ...] | 將一個或多個值插入到列表的頭部 |
RPUSH key value [value ...] | 將一個或多個值插入到列表的尾部 |
LPOP key | 移除并返回列表的第一個元素 |
RPOP key | 移除并返回列表的最后一個元素 |
LINDEX key index | 通過索引獲取列表中的元素(索引從 0 開始,負數表示從尾部開始) |
LLEN key | 獲取列表的長度 |
LRANGE key start stop | 獲取列表中指定區間內的元素 |
**LINSERT key BEFORE | AFTER pivot value** |
LSET key index value | 對列表中指定索引位置的元素進行賦值 |
LREM key count value | 根據參數 count 的值,移除列表中與 value 相等的元素 |
LTRIM key start stop | 對列表進行修剪,只保留指定區間內的元素 |
RPOPLPUSH source destination | 移除 source 列表的最后一個元素,并將其添加到 destination 列表的頭部,同時返回該元素 |
BLPOP key [key ...] timeout | 阻塞式地移除并返回列表的第一個元素(可同時阻塞多個列表) |
BRPOP key [key ...] timeout | 阻塞式地移除并返回列表的最后一個元素 |
BRPOPLPUSH source destination timeout | 阻塞式地執行 RPOPLPUSH 操作 |
LPUSHX key value | 當列表存在時,將值插入到列表頭部 |
RPUSHX key value | 當列表存在時,將值插入到列表尾部 |
示例
LPUSH queue "task1"
RPUSH queue "task2"
LPOP queue
LRANGE queue 0 -1
5. 集合 (Set)
命令 | 說明 |
---|---|
SADD key member [member ...] | 向集合中添加一個或多個成員 |
SREM key member [member ...] | 移除集合中的一個或多個成員 |
SMEMBERS key | 返回集合中的所有成員 |
SISMEMBER key member | 判斷指定元素是否集合的成員 |
SCARD key | 獲取集合中成員的數量 |
SINTER key [key ...] | 返回給定所有集合的交集 |
SINTERSTORE destination key [key ...] | 計算給定集合的交集,并將結果存儲在 destination 中 |
SUNION key [key ...] | 返回給定所有集合的并集 |
SUNIONSTORE destination key [key ...] | 計算給定集合的并集,并將結果存儲在 destination 中 |
SDIFF key [key ...] | 返回給定集合之間的差集 |
SDIFFSTORE destination key [key ...] | 計算差集并將結果存儲在 destination 中 |
SRANDMEMBER key [count] | 返回集合中一個或多個隨機成員 |
SSCAN key cursor [MATCH pattern] [COUNT count] | 迭代集合中的元素(適合處理大集合時分批遍歷) |
示例
SADD users "Tom" "Jerry"
SMEMBERS users
SISMEMBER users "Tom"
SREM users "Jerry"
SCARD users
6. 有序集合 (Sorted Set / ZSet)
命令 | 說明 |
---|---|
ZADD key [NX|XX] [CH] [INCR] score member [score member ...] | |
ZREM key member [member ...] | 移除有序集合中的一個或多個成員 |
ZINCRBY key increment member | 為有序集合中的成員的分數加上指定值 |
ZRANGE key start stop [WITHSCORES] | 返回有序集合中指定區間內的成員(按分數從低到高排序) |
ZREVRANGE key start stop [WITHSCORES] | 返回有序集合中指定區間內的成員(按分數從高到低排序) |
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | 返回有序集合中分數在指定范圍內的成員 |
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] | 返回有序集合中分數在指定范圍內的成員(從高到低排序) |
ZRANK key member | 返回成員在有序集合中的排名(從 0 開始,按分數從低到高排序) |
ZREVRANK key member | 返回成員在有序集合中的排名(從 0 開始,按分數從高到低排序) |
ZSCORE key member | 返回有序集合中成員的分數 |
ZCARD key | 獲取有序集合中的成員數量 |
ZCOUNT key min max | 統計分數在指定范圍內的成員數量 |
ZLEXCOUNT key min max | 統計字典序在指定范圍內的成員數量(僅適用于分數相同的成員) |
ZRANGEBYLEX key min max [LIMIT offset count] | 返回有序集合中成員的字典序范圍內的元素 |
ZREVRANGEBYLEX key max min [LIMIT offset count] | 返回有序集合中成員的字典序范圍內的元素(逆序) |
ZPOPMIN key [count] | 移除并返回有序集合中分數最小的成員 |
ZPOPMAX key [count] | 移除并返回有序集合中分數最大的成員 |
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM | MAX |?MIN] | 多個有序集合求并集 |
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM | MAX |?MIN] | 多個有序集合求交集 |
ZSCAN key cursor [MATCH pattern] [COUNT count] | 迭代有序集合中的元素 |
ZMSCORE key member [member ...] | 獲取有序集合中多個成員的分數(Redis 6.2 及以上支持) |
示例
ZADD ranking 100 "Alice"
ZADD ranking 200 "Bob"
ZRANGE ranking 0 -1 WITHSCORES
ZREM ranking "Alice"
7. 其他操作
命令 | 作用 |
---|---|
FLUSHDB | 清空當前數據庫 |
FLUSHALL | 清空所有數據庫 |
INFO | 獲取服務器統計信息 |
PING | 測試連接 |
?特定使用場景操作
1. Geo(地理位置存儲與計算)
Redis 的 Geo 用于存儲地理位置(經緯度)并提供距離計算、范圍查詢等功能。
命令 | 作用 |
---|---|
GEOADD key longitude latitude member [longitude latitude member ...] | 添加地理位置信息 |
GEODIST key member1 member2 [unit] | 計算兩個位置之間的距離(支持單位:m、km、mi、ft) |
GEOPOS key member [member ...] | 獲取指定位置的經緯度 |
`GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [COUNT count] [ASC|DESC]` | |
`GEORADIUSBYMEMBER key member radius unit [WITHCOORD] [WITHDIST] [COUNT count] [ASC|DESC]` | |
GEOHASH key member [member ...] | 獲取成員的 GeoHash 值 |
示例
GEOADD cities 116.40 39.90 "Beijing"
GEOADD cities 121.47 31.23 "Shanghai"
GEODIST cities "Beijing" "Shanghai" km
GEORADIUS cities 116.40 39.90 100 km WITHDIST
2. HyperLogLog(基數統計)
Redis HyperLogLog 是用于 近似統計不重復元素數量 的數據結構,占用內存固定(12 KB),適用于大規模數據去重計數。
命令 | 作用 |
---|---|
PFADD key element [element ...] | 添加元素到 HyperLogLog |
PFCOUNT key [key ...] | 獲取去重后的元素數量估算值 |
PFMERGE destkey sourcekey [sourcekey ...] | 合并多個 HyperLogLog |
示例
PFADD users "user1" "user2" "user3"
PFCOUNT users
PFMERGE total_users users1 users2
適用場景:統計 網站UV、活躍用戶數、訪問IP數 等。
3. Bitmap(位圖)
Bitmap 是 二進制位存儲 結構,適用于存儲 用戶簽到、活躍狀態、權限控制 等場景。
命令 | 作用 |
---|---|
SETBIT key offset value | 設置某個位的值(1 或 0) |
GETBIT key offset | 獲取某個位的值 |
BITCOUNT key [start end] | 統計 key 中值為 1 的位個數 |
BITOP operation destkey key [key ...] | 按位操作(AND、OR、XOR、NOT) |
示例
SETBIT sign:20240301 1 1 # 用戶ID=1簽到
SETBIT sign:20240301 2 1 # 用戶ID=2簽到
GETBIT sign:20240301 1 # 查詢用戶ID=1是否簽到
BITCOUNT sign:20240301 # 統計今日簽到人數
適用場景:用戶簽到、狀態標記、權限控制、唯一性判斷。
4. BitField(高級位操作)
BitField 用于操作多個二進制位 (支持批量讀寫),適用于 計數器、標記存儲、狀態管理。
命令 | 作用 |
---|---|
BITFIELD key GET type offset | 讀取某個位置的值 |
BITFIELD key SET type offset value | 設置某個位范圍的值 |
BITFIELD key INCRBY type offset increment | 對某個位范圍的值進行增減 |
示例
BITFIELD user_data SET u8 0 100 # 把偏移量0的8位數值設為100
BITFIELD user_data INCRBY u8 0 5 # 偏移量0的8位數值加5
BITFIELD user_data GET u8 0 # 獲取偏移量0的8位值
適用場景:用戶計數、狀態標記、存儲緊湊數據。
5. Scan(游標迭代查詢)
SCAN
命令用于 大規模數據迭代查詢,可以分批遍歷 key、集合、哈希、ZSet。
命令 | 作用 |
---|---|
SCAN cursor [MATCH pattern] [COUNT count] | 迭代 key |
HSCAN key cursor [MATCH pattern] [COUNT count] | 迭代 hash |
SSCAN key cursor [MATCH pattern] [COUNT count] | 迭代 set |
ZSCAN key cursor [MATCH pattern] [COUNT count] | 迭代 zset |
示例
SCAN 0 MATCH user:* COUNT 10
HSCAN user:1001 0 MATCH name COUNT 5
適用場景:海量數據分頁查詢,防止 KEYS
阻塞 Redis。