本文更新於2021-07-10,使用Redis 6.0.8,操作系統為Deepin 15.11。
說明:本文中,小寫為自定義變量,根據實際情況填寫。使用[]
引起表示內容可選,|
表示使用左側或右側內容,...
表示重復之前內容。
官方文檔參看:https://redis.io/commands
字符串
即字節序列。也可視作整數、浮點數。
APPEND
字符串追加內容,如鍵不存在則創建。
APPEND str value
返回追加后的字節長度:
(integer) 5
BITCOUNT
統計二進制位中為1的數量。可指定字節區間[start, end]。
BITCOUNT str [start, end]
返回二進制位為1的數量:
(integer) 4
BITOP
執行位運算后將結果存儲於deststr。
BITOP AND|OR|XOR deststr str [...]
BITOP NOT deststr str
返回結果字符串deststr的字節長度:
(integer) 1
DECR
自減1,只可用於視為整數的字符串類型。如鍵不存在,則先以0值創建。
DECR str
返回自減后的值:
"-1"
DECRBY
減少指定整數值,只可用於視為整數的字符串類型。如鍵不存在,則先以0值創建。
DECRBY str decrement
返回減少后的值:
"-1"
GET
獲取字符串。
GET str
返回字符串:
"value"
或無此鍵時返回:
(nil)
GETBIT
獲取第offset的二進制位。字節的高位在前,第一位為0,不可使用負數。
GETBIT str offset
只會返回0或1,如位不存在則返回0:
(integer) 1
GETRANGE
獲取字節區間[start, end]內的子串。第一個字節下標為0,可使用負數,最后一個字節下標為-1。
GETRANGE str start end
返回子串:
"val"
或如不存在返回:
""
INCR
自增1,只可用於視為整數的字符串類型。如鍵不存在,則先以0值創建。
INCR str
返回自增后的值:
(integer) 1
INCRBY
增加整數值,只可用於視為整數的字符串類型。如鍵不存在,則先以0值創建。
INCRBY str increment
返回增加后的值:
(integer) 1
INCRBYFLOAT
增加浮點數值,只可用於視為整數或浮點數的字符串類型。如鍵不存在,則先以0值創建。
INCRBYFLOAT str increment
返回增加后的值:
"0.1"
SET
設置字符串。
SET str value [EX seconds|PX milliseconds] [NX|XX]
NX
為只當鍵不存在時設置,XX
為只當鍵存在時設置。
成功返回:
OK
當使用NX
時鍵不存在,或當使用XX
時鍵已存在,則返回:
OK
當使用NX
時鍵已存在,或當使用XX
時鍵不存在,則返回:
(nil)
SETBIT
設置第offset的二進制位,只能設置為0或1,如鍵不存在則創建。字節的高位在前,第一位為0,不可使用負數。如字符串長度不足,則使用0值字節填充。
SETBIT str offset bit
返回二進制位原來的值:
(integer) 1
SETNX
只當鍵不存在時設置字符串。
SETNX str value
成功設置返回1,未成功設置返回0:
(integer) 1
SETRANGE
設置從offset(含)字節起的內容,如鍵不存在則創建。第一個字節下標為0,不可使用負數。如字符串長度不足,則使用0值字節填充。
SETRANGE str offset value
返回設置后的字符串字節長度:
(integer) 5
列表
元素為字符串。左側為開頭,右側為結尾。
BLPOP
阻塞地從第一個非空列表彈出最左側元素。
BLPOP list [...] timeoutseconds
如無阻塞彈出,則返回彈出的列表、元素:
1) "list"
2) "element"
如有阻塞彈出,則返回彈出的列表、元素和阻塞時間:
1) "list"
2) "element"
(1.01s)
如阻塞超時未彈出,則返回nil和阻塞時間:
(nil)
(3.01s)
BRPOP
阻塞地從第一個非空列表彈出最右側元素。
BRPOP list [...] timeoutseconds
如無阻塞,則返回彈出的列表、元素:
1) "list"
2) "element"
如有阻塞,則返回彈出的列表、元素和阻塞時間:
1) "list"
2) "element"
(1.01s)
如阻塞超時,則返回nil和阻塞時間:
(nil)
(3.01s)
BRPOPLPUSH
阻塞地從srclist彈出最右側元素,並把元素推入destlist最左側。如destlist不存在則創建。
BRPOPLPUSH srclist destlist timeoutseconds
如無阻塞,則返回該元素:
"element"
如有阻塞,則返回該元素和阻塞時間:
"element"
(1.01s)
如阻塞超時,則返回nil和阻塞時間:
(nil)
(3.01s)
LINDEX
返回左側指定下標的元素。第一個元素下標為0,可使用負數,最后一個元素下標為-1。
LINDEX list n
返回該下標處的元素:
"element"
或無此元素時返回:
(nil)
LPOP
彈出最左側元素。
LPOP list
返回彈出的元素:
"element"
或列表為空時返回:
(nil)
LPUSH
將元素依次推入列表最左側,如列表不存在則創建。參數中最后的元素位於列表最左側。
LPUSH list element [...]
返回列表的長度:
(integer) 1
LRANGE
從左側起查找區間[start, end]內的元素。第一個元素下標為0,可使用負數,最后一個元素下標為-1。
LRANGE list start end
返回元素列表:
1) "element0"
2) "element1"
或列表為空時返回:
(empty array)
LTRIM
從左側起裁剪列表,只保留區間[start, end]內的元素。第一個元素下標為0,可使用負數,最后一個元素下標為-1。
LTRIM list start end
成功返回:
OK
RPOP
彈出最右側元素。
RPOP list
返回彈出的元素:
"element"
或列表為空時返回:
(nil)
RPOPLPUSH
從srclist彈出最右側元素,並把元素推入destlist最左側。如destlist不存在則創建。
RPOPLPUSH srclist destlist
返回該元素:
"element"
或當srclist為空時返回:
(nil)
RPUSH
將元素依次推入列表右側,如列表不存在則創建。參數中最后的元素位於列表最右側。
RPUSH list element [...]
返回列表的長度:
(integer) 1
無序集
元素為字符串。
SADD
添加元素至集合中,如集合不存在則創建。
SADD set element [...]
返回實際添加的元素個數,如元素已存在則不計入個數:
(integer) 1
SCARD
返回集合的元素數量。
SCARD set
返回元素數量:
(integer) 1
SDIFF
差集運算。
SDIFF set excludeset [...]
返回結果集合的元素:
1) "element0"
2) "element1"
或當結果集合為空時返回:
(empty array)
SDIFFSTORE
差集運算,並將結果存儲至destset。如destset不存在則創建,如已存在則清空。
SDIFFSTORE destset set excludeset [...]
返回結果集合的元素個數:
(integer) 2
SINTER
交集運算。
SINTER set [...]
返回結果集合的元素:
1) "element0"
2) "element1"
或當結果集合為空時返回:
(empty array)
SINTERSTORE
交集運算,並將結果存儲至destset。如destset不存在則創建,如已存在則清空。
SINTERSTORE destset set [...]
返回結果集合的元素個數:
(integer) 2
SISMEMBER
檢查是否包含元素。
SISMEMBER set element
包含返回1,不包含返回0:
(integer) 1
SMEMBERS
返回集合的所有元素。
SMEMBERS set
返回所有元素:
1) "element0"
2) "element1"
或集合為空時返回:
(empty array)
SMOVE
如元素在srcset中,則將其刪除並移入destset。如destset不存在則創建。
SMOVE srcset destset element
如移動則返回1,如未移動則返回0:
(integer) 1
SPOP
隨機彈出元素。
SPOP set [count]
返回彈出的元素列表:
"element0"
"element1"
或無元素彈出時返回:
(empty array)
SRANDMEMBER
隨機返回元素。當count為正數時,元素不會重復,因此個數可能不足;當count為負數時,元素可能重復。
SRANDMEMBER set [count]
返回元素列表:
"element0"
"element1"
或count為0時返回:
(empty array)
SREM
刪除集合中的元素。
SREM set element [...]
返回實際刪除的元素個數,如元素不存在則不計入個數:
(integer) 1
SUNION
並集運算。
SUNION set [...]
返回結果集合的元素:
1) "element0"
2) "element1"
或當結果集合為空時返回:
(empty array)
SUNIONSTORE
並集運算,並將結果存儲至destset。如destset不存在則創建,如已存在則清空。
SUNIONSTORE destset set [...]
返回結果集合的元素個數:
(integer) 2
有序集
字符串與浮點數分值映射。
ZADD
添加元素及分值至有序集合中,如有序集合不存在則創建。
ZADD zset score element [score element ...]
返回實際添加的元素個數,如元素已存在且分值相同則不計入個數:
(integer) 1
ZCARD
返回有序集合的元素數量。
ZCARD zset
返回元素數量:
(integer) 1
ZCOUNT
返回有序集合分值在區間[min, max]的元素數量。
ZCOUNT zset min max
返回元素數量:
(integer) 1
ZINCRBY
增加元素的分值。如元素不存在,則先以0分值添加。
ZINCRBY zset increment element
返回增加后的分值:
"0.1"
ZINTERSTORE
類似交集運算,並將結果存儲至destzset。如destset不存在則創建,如已存在則清空。
ZINTERSTORE destzset nzset zset [...] [WEIGHTS weight [...]] [AGGREGATE SUM|MIN|MAX]
zset參數可使用集合,被當作分值為1的有序集合。AGGREGATE默認為SUM。
返回結果有序集合的元素個數:
(integer) 2
ZRANGE
分值從小到大查找排名在區間[start, end]內的元素。第一個元素下標為0,可使用負數,最后一個元素下標為-1。
ZRANGE zset start end [WITHSCORES]
返回元素列表:
1) "element0"
2) "element1"
如指定WITHSCORES
則同時返回分值:
1) "element0"
2) "1"
3) "element1"
4) "2"
或列表為空時返回:
(empty array)
ZRANK
查找元素在有序集合中從小到大的排名。第一為0。
ZRANK zset element
返回元素的排名:
(integer) 0
或當元素不存在時返回:
(nil)
ZRANGEBYSCORE
分值從小到大查找分值在區間[min, max]的元素。
ZRANGEBYSCORE zset min max [WITHSCORES] [LIMIT offset count]
返回元素列表:
1) "element0"
2) "element1"
如指定WITHSCORES
則同時返回分值:
1) "element0"
2) "1"
3) "element1"
4) "2"
或列表為空時返回:
(empty array)
ZREM
刪除有序集合中的元素。
ZREM zset elment [...]
返回實際刪除的元素個數,如元素不存在則不計入個數:
(integer) 1
ZREMRANGEBYRANK
刪除有序集合中分值從小到大排名在區間[start, end]內的元素。第一個元素下標為0,可使用負數,最后一個元素下標為-1。
ZREMRANGEBYRANK zset start end
返回被刪除的元素個數:
(integer) 1
ZREMRANGEBYSCORE
刪除有序集合中分值在區間[min, max]內的元素。
ZREMRANGEBYSCORE zset min max
返回被刪除的元素個數:
(integer) 1
ZREVRANGE
分值從大到小查找排名在區間[start, end]內的元素。第一個元素下標為0,可使用負數,最后一個元素下標為-1。
ZREVRANGE zset start end [WITHSCORES]
返回元素列表:
1) "element0"
2) "element1"
如指定WITHSCORES
則同時返回分值:
1) "element0"
2) "2"
3) "element1"
4) "1"
或列表為空時返回:
(empty array)
ZREVRANGEBYSCORE
分值從大到小查找分值在區間[min, max]的元素。
ZRANGEBYSCORE zset max min [WITHSCORES] [LIMIT offset count]
返回元素列表:
1) "element0"
2) "element1"
如指定WITHSCORES
則同時返回分值:
1) "element0"
2) "2"
3) "element1"
4) "1"
或列表為空時返回:
(empty array)
ZREVRANK
查找元素在有序集合中從大到小的排名。第一為0。
ZREVRANK zset element
返回元素的排名:
(integer) 0
或當元素不存在時返回:
(nil)
ZSCORE
返回元素的分值。
ZSCORE zset element
返回分值:
"1"
或當元素不存在時返回:
(nil)
ZUNIONSTORE
類似並集運算,並將結果存儲至destzset。如destset不存在則創建,如已存在則清空。
ZUNIONSTORE destzset nzset zset [...] [WEIGHTS weight [...]] [AGGREGATE SUM|MIN|MAX]
zset參數可使用集合,被當作分值為1的有序集合。AGGREGATE默認為SUM。
返回結果有序集合的元素個數:
(integer) 2
無序散列
鍵值均為字符串,值也可視作整數、浮點數。
HDEL
刪除散列的鍵,如散列所有鍵都被刪除則散列也會被刪除。
HDEL hash field [...]
返回實際刪除的鍵個數,如鍵不存在則不計入個數:
(integer) 1
HEXISTS
檢查鍵是否存在。
HEXISTS hash field
存在返回1,不存在返回0:
(integer) 1
HGET
獲取單個鍵對應的值。
HGET hash field
返回鍵對應的值:
"value"
或當無此鍵時返回:
(nil)
HGETALL
返回所有鍵值對。
HGETALL hash
鍵值間隔依次返回:
1) "field1"
2) "value1"
3) "field2"
4) "value2"
或散列為空時返回:
(empty array)
HINCRBY
增加鍵的值,只可用於視為整數的字符串類型。如散列鍵不存在則創建,如鍵不存在則先以0值創建。
HINCRBY hash field increment
返回增加后的值:
(integer) 1
HINCRBYFLOAT
增加鍵的浮點數值,只可用於視為整數或浮點數的字符串類型。如散列鍵不存在則創建,如鍵不存在則先以0值創建。
HINCRBYFLOAT hash field increment
返回增加后的值:
"0.1"
HKEYS
返回所有鍵。
HKEYS hash
返回鍵的列表:
1) "field1"
2) "field2"
或散列為空時返回:
(empty array)
HLEN
返回鍵值對數量。
HLEN hash
返回數量:
(integer) 1
HMGET
獲取多個鍵對應的值。
HMGET hash field [...]
依次返回鍵對應的值,如鍵不存在則值為nil:
1) "value1"
2) (nil)
HMSET
設置散列的鍵值對,如散列不存在則創建。
HMSET hash field value [field value ...]
返回實際添加的鍵個數,如鍵已存在則不計入個數:
(integer) 1
HSET
設置散列的鍵值對,如散列不存在則創建。
HSET hash field value [field value ...]
返回實際添加的鍵個數,如鍵已存在則不計入個數:
(integer) 1
HVALS
返回所有值。值可能重復。
HVALS hash
返回值的列表:
1) "value1"
2) "value2"
或散列為空時返回:
(empty array)
鍵
DEL
刪除鍵,可用於所有類型。
DEL key [...]
返回刪除的鍵數量,如鍵不存在則不計入個數:
(integer) 1
EXISTS
檢查鍵是否存在,可用於所有類型。
EXISTS key [...]
返回存在的鍵數量:
(integer) 1
排序
SORT
排序。可對列表、集合、有序集(忽略分值)進行排序。
SORT key [BY by_pattern] [LIMIT offset count] [GET get_pattern [GET get_pattern ...]] [ASC|DESC] [ALPHA] [STORE destlist]
BY
指定使用外部鍵進行排序。以key中的元素替換by_pattern中的號,以此作為鍵查找字符串,再使用此字符串作為排序的依據(如:user)。或以key中的元素替換by_pattern中的號,以此作為鍵查找無序散列,再使用->取無序散列中鍵的值作為排序的依據(如:user->name)。如by_pattern不存在,則跳過排序。
LIMIT
限制返回的結果跳過的數量和返回的總數量。
GET
指定外部鍵作為返回結果。以key中的元素替換get_pattern中的號,以此作為鍵查找字符串,再使用此字符串作為返回結果(如:user)。或以key中的元素替換by_pattern中的號,以此作為鍵查找無序散列,再使用->取無序散列中鍵的值作為返回結果(如:user->name)。get_pattern為#表示key中的元素。
ASC
為升序,DESC
為降序,默認為升序。
ALPHA
為作為字符串排序,默認為作為數值排序。
STORE
將結果保存至列表中,如destlist不存在則創建,如已存在則清空。
返回排序后的元素:
"1"
"2"
或如返回多個外部鍵:
"1"
"a"
"2"
"b"
或無元素時返回:
(empty array)
如使用了STORE
則返回排序后的元素數量:
(integer) 1
過期
EXPIRE
設置鍵於若干秒后過期。
EXPIRE key seconds
鍵存在返回1,不存在返回0:
(integer) 1
EXPIREAT
設置鍵於秒級Unix時間戳過期:
EXPIREAT key unix_timestamp_second
鍵存在返回1,不存在返回0:
(integer) 1
PERSIST
將鍵設為永久,會移除過期時間。
PERSIST key
鍵原有過期時間返回1,原是永久返回0:
(integer) 1
PEXPIRE
設置鍵於若干毫秒后過期。
PEXPIRE key millseconds
鍵存在返回1,不存在返回0:
(integer) 1
PEXPIREAT
設置鍵於毫秒級Unix時間戳過期:
PEXPIREAT key unix_timestamp_millsecond
鍵存在返回1,不存在返回0:
(integer) 1
PTTL
查看鍵距離過期的毫秒數。
PTTL key
返回毫秒數,永久返回-1,不存在返回-2:
(integer) 1
TTL
查看鍵距離過期的秒數。
TTL key
返回秒數,永久返回-1,不存在返回-2:
(integer) 1
事務
命令的執行順序為:WATCH
、UNWATCH
(不再繼續執行后面的命令)、MULTI
、DISCARD
(不再繼續執行后面的命令)、EXEC
。
DISCARD
取消所有對鍵進行的監視並清空使用MULTI
入隊的命令。在MULTI
之后EXEC
之前執行。
DISCARD
返回:
OK
EXEC
執行事務。
EXEC
執行MULTI
至EXEC
的所有命令,嵌套返回各命令的執行結果:
1) "value"
2) 1) "element0"
2) "element1"
執行失敗返回:
(nil)
MULTI
開始事務。
MULTI
返回:
OK
MULTI
至EXEC
的所有命令會入隊並在EXEC
后一起執行,期間所有命令均返回:
QUEUED
UNWATCH
取消所有對鍵進行的監視。在WATCH
之后MULTI
之前執行。
UNWATCH
返回:
OK
WATCH
對鍵進行監視。執行WATCH
至EXEC
這段時間內,如其他連接對鍵進行修改,EXEC
會執行失敗。
WATCH key [...]
返回:
OK
發布/訂閱
消息為字符串。
PSUBSCRIBE
訂閱匹配glob模式的頻道。
PSUBSCRIBE glob [...]
依次返回各頻道的事件名(psubscribe)、glob模式、當前訂閱的頻道數量:
1) "psubscribe"
2) "glob1"
3) (integer) 1
1) "psubscribe"
2) "glob2"
3) (integer) 2
此后,當前連接被阻塞直至斷開。期間依次輸出消息的事件名(pmessage)、glob模式、頻道名、消息值:
1) "pmessage"
2) "glob1"
3) "channel"
4) "msg"
PUNSUBSCRIBE
在redis-cli,因訂閱后連接被阻塞,不能使用此命令。
退訂匹配glob模式的頻道。如不指定glob則退訂所有頻道。
PUNSUBSCRIBE [glob [...]]
依次返回各glob模式的事件名(punsubscribe)、glob模式、當前訂閱的頻道數量。如當前訂閱的頻道數量已為0,則不繼續返回后續事件,但事件仍存在連接的隊列中:
1) "punsubscribe"
2) "glob1"
3) (integer) 1
1) "punsubscribe"
2) "glob2"
3) (integer) 0
當不指定channel且沒有訂閱頻道時返回:
1) "punsubscribe"
2) (nil)
3) (integer) 0
PUBLISH
向頻道發送消息。
PUBLISH channel msg
返回接收到消息的連接數:
(integer) 1
SUBSCRIBE
訂閱頻道。
SUBSCRIBE channel [...]
依次返回各頻道的事件名(subscribe)、頻道名、當前訂閱的頻道數量:
1) "subscribe"
2) "channel1"
3) (integer) 1
1) "subscribe"
2) "channel2"
3) (integer) 2
此后,當前連接被阻塞直至斷開。期間依次輸出消息的事件名(message)、頻道名、消息值:
1) "message"
2) "channel1"
3) "msg"
UNSUBSCRIBE
在redis-cli,因訂閱后連接被阻塞,不能使用此命令。
退訂頻道。如不指定channel則退訂所有頻道。
UNSUBSCRIBE [channel [...]]
依次返回各頻道的事件名(unsubscribe)、頻道名、當前訂閱的頻道數量。如當前訂閱的頻道數量已為0,則不繼續返回后續事件,但事件仍存在連接的隊列中:
1) "unsubscribe"
2) "channel1"
3) (integer) 1
1) "unsubscribe"
2) "channel2"
3) (integer) 0
當不指定channel且沒有訂閱頻道時返回:
1) "unsubscribe"
2) (nil)
3) (integer) 0
持久化
BGREWRITEAOF
重寫AOF文件。子進程負責將AOF文件寫入磁盤,父進程繼續處理命令請求。
BGREWRITEAOF
返回:
Background append only file rewriting started
BGSAVE
后台創建快照文件。子進程負責將快照文件寫入磁盤,父進程繼續處理命令請求。
BGSAVE
返回:
Background saving started
SAVE
前台創建快照文件。快照文件創建完畢之前都不再響應任何其他命令。
SAVE
返回:
OK
復制
SLAVEOF
作為從服務器,指定主服務器,並丟棄已有數據,復制數據:
SLAVEOF host port
停止復制,使用已有數據,由從服務器切換為主服務器:
SLAVEOF NO ONE
返回:
OK
管理
DEBUG OBJECT
返回對象的調試信息。
DEBUG OBJECT key
返回調試信息:
Value at:0x7f4500a77c80 refcount:1 encoding:ziplist serializedlength:17 lru:11272693 lru_seconds_idle:6559102
如鍵不存在返回:
(error) ERR no such key
INFO
查看服務器狀態信息。
INFO section
返回的信息包括幾個小節,每個小節由一行以“#”開頭的小節名開頭及一行空行結尾,小節中每條信息一行並以“:”分隔名字和值:
# Modules
# Cluster
cluster_enabled:0
各名字的含義如下:
- aof_pending_bio_fsync:AOF等待同步到磁盤的命令數。
SELECT
選擇切換至第n號庫。最大為15,默認為0。如非0,命令行提示符帶有“[n]”字樣。
SELECT n
返回:
OK
SHUTDOWN
停止服務。
SHUTDOWN [NOSAVE|SAVE]
無返回,連接斷開。
腳本
EVAL
執行Lua腳本代碼。
EVAL lua_code key_amount [key [...]] [arg [...]]
key為lua_code中使用到的鍵,在Lua腳本中依次以KEYS[1]等形式使用。arg為lua_code中使用到的附加參數,在Lua腳本中依次以ARGV[1]等形式使用。
返回Lua腳本的返回值,如有表格(table)則嵌套返回:
1) "lua"
2) 1) (integer) 1
2) (integer) 2
或當失敗返回錯誤:
(error) ERR wrong number of arguments for 'eval' command
EVALSHA
執行已加載的Lua腳本代碼。
EVALSHA sha1 key_amount [key [...]] [arg [...]]
key為lua_code中使用到的鍵,在Lua腳本中依次以KEYS[1]等形式使用。arg為lua_code中使用到的附加參數,在Lua腳本中依次以ARGV[1]等形式使用。
返回Lua腳本的返回值,如有表格(table)則嵌套返回:
1) "lua"
2) 1) (integer) 1
2) (integer) 2
或當失敗返回錯誤:
(error) ERR wrong number of arguments for 'evalsha' command
SCRIPT FLUSH
清除所有已加載的Lua腳本代碼。
SCRIPT FLUSH
返回:
OK
SCRIPT KILL
殺死正在執行的Lua腳本。
SCRIPT KILL
返回:
OK
如沒有正在執行的Lua腳本則返回:
(error) NOTBUSY No scripts in execution right now.
SCRIPT LOAD
加載但不執行Lua腳本代碼:
SCRIPT LOAD lua_code
返回腳本代碼的SHA1校驗和:
"e0e1f9fabfc9d4800c877a703b823ac0578ff8db"
或當失敗返回錯誤:
(error) ERR Unknown subcommand or wrong number of arguments for 'load'. Try SCRIPT HELP.