Redis學習筆記:命令


本文更新於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

事務

命令的執行順序為:WATCHUNWATCH(不再繼續執行后面的命令)、MULTIDISCARD(不再繼續執行后面的命令)、EXEC

DISCARD

取消所有對鍵進行的監視並清空使用MULTI入隊的命令。在MULTI之后EXEC之前執行。

DISCARD

返回:

OK

EXEC

執行事務。

EXEC

執行MULTIEXEC的所有命令,嵌套返回各命令的執行結果:

1) "value"
2) 1) "element0"
   2) "element1"

執行失敗返回:

(nil)

MULTI

開始事務。

MULTI

返回:

OK

MULTIEXEC的所有命令會入隊並在EXEC后一起執行,期間所有命令均返回:

QUEUED

UNWATCH

取消所有對鍵進行的監視。在WATCH之后MULTI之前執行。

UNWATCH

返回:

OK

WATCH

對鍵進行監視。執行WATCHEXEC這段時間內,如其他連接對鍵進行修改,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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM