redis 鍵命令
Redis 鍵命令用於管理 redis 的鍵. 原文
語法
COMMAND key [key ...]
鍵命令
DEL
刪除指定鍵, 返回被刪除鍵的數量, 若鍵不存在直接忽略. 官方文檔
語法
DEL key [key ...]
返回值
- 被刪除鍵的數量
示例
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> DEL key1 key2 key3
(integer) 2
EXISTS
檢測指定鍵是否存在. 官方文檔
語法
EXISTS key [key ...]
返回值
- 存在的鍵的數量
示例
redis> SET key1 "Hello"
"OK"
redis> EXISTS key1
(integer) 1
redis> EXISTS nosuchkey
(integer) 0
redis> SET key2 "World"
"OK"
redis> EXISTS key1 key2 nosuchkey
(integer) 2
EXPIRE
設置鍵 key 的有效期, 若 key 有效期已存在則更新. 過了有效期后, 鍵 key 會被自動刪除 官方文檔
語法
EXPIRE key seconds
- seconds 有效期, 單位秒.
返回值
- 1 有效期被設值成功
- 0 key 不存在
示例
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> TTL mykey -- 10 秒執行
(integer) -2 -- key 不存在返回 -2
redis> SET mykey "Hello World"
"OK"
redis> TTL mykey
(integer) -1 -- key 沒有有效期關聯返回 -1
PEXPIRE 同 EXPIRE, 區別 PEXPIRE 單位為毫秒
EXPIREAT
功能類似 EXPIRE, 不過此命令設置的有效期是時間點, 值為自1970年1月1日以來的秒數. 官方文檔
語法
EXPIREAT key timestamp
- timestamp 時間戳
返回值
- 1 有效期被設值成功
- 0 key 不存在
示例
redis> SET mykey "Hello"
"OK"
redis> EXISTS mykey
(integer) 1
redis> EXPIREAT mykey 1293840000
(integer) 1
redis> EXISTS mykey
(integer) 0
PEXPIREAT 同 EXPIREAT, 區別 PEXPIREAT 單位為毫秒
KEYS
返回所有匹配指定模式的 KEY. 該指令通常用於調試問題, 盡量避免在應用代碼中使用, 若有類似需求可以考慮使用 SCAN 命令或者 sets 數據結構. 官方文檔
語法
KEYS pattern
支持的模式 pattern 的規則如下:
- h?llo 匹配 hello, hallo, hxllo ...
- h*llo 匹配 hllo, heeeello ...
- h[ae]llo 匹配 hello, hallo. 不能匹配 hillo
- h[^e]llo 匹配 hallo, hbllo ... 不能匹配 hello
- h[a-b]llo 匹配 hallo and hbllo
返回值
- 匹配 key 列表
示例
redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "age"
3) "firstname"
MIGATE
遷移指定 KEY. 官方文檔
語法
MIGRATE host port key|"" destination-db timeout [COPY] [REPLACE] [KEYS key [key ...]]
選項
- COPY 不刪除當前實例中的 KEY
- REPLACE 替換遠程實例已存在的 KEY
- KEYS 指定 KEY, 若為空則為所有 KEY
返回值
- OK 命令執行成功
- NOKEY 當前實例為空
實例
MIGRATE 192.168.1.34 6379 "" 0 5000 KEYS key1 key2 key3
MOVE
將指定 KEY 移至指定 DB. 官方文檔
語法
MOVE key db
返回值
- 1 指定 KEY 被移動成功
- 0 指定 KEY 不存在
OBJECT
查看 Redis 的內部對象, 通常用於調試. 官方文檔
語法
OBJECT subcommand [arguments [arguments ...]]
OBJECT 命令支持的子命令:
- OBJECT REFCOUNT <key> 返回指定 KEY 關聯值引用的數量.
- OBJECT ENCODING <key> 返回指定 KEY 關聯值存貯的編碼方式
- OBJECT IDLETIME <key> 返回指定 KEY 未使用的時長
- OBJECT FREQ <key> 返回指定 KEY 使用頻率
- OBJECT HELP 打印該命令幫助信息
示例
redis> lpush mylist "Hello World"
(integer) 4
redis> object refcount mylist
(integer) 1
redis> object encoding mylist
"ziplist"
redis> object idletime mylist
(integer) 10
PERSIST
移除 key 的過期時間. 官方文檔
語法
PERSIST key
返回值
- 1 指定 key 的過期時間被移除
- 0 指定 key 不存在或未設置過期時間
示例
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> PERSIST mykey
(integer) 1
redis> TTL mykey
(integer) -1
RANDOMKEY
從當前數據庫中返回一個隨機 KEY. 官方文檔
返回值
- key 一個隨機 KEY
- nil 數據庫為空時返回
RENAME
重命名 KEY, 若新 KEY 已存在則會被覆蓋. 官方文檔
語法
RENAME key newkey
示例
redis> SET mykey "Hello"
"OK"
redis> RENAME mykey myotherkey
"OK"
redis> GET myotherkey
"Hello"
RENAME
重命名 KEY, 若新 KEY 已存在則會出錯. 官方文檔
語法
RENAMENX key newkey
示例
redis> SET mykey "Hello"
"OK"
redis> SET myotherkey "World"
"OK"
redis> RENAMENX mykey myotherkey
(integer) 0
redis> GET myotherkey
"World"
SCAN
遍歷當前數據庫 key. 官方文檔
語法
RENAMENX cursor
- cursor 起始光標
返回值
- cursor 下次 SCAN 的其實位置
示例
redis> SET mykey "Hello"
"OK"
redis> SET myotherkey "World"
"OK"
redis> RENAMENX mykey myotherkey
(integer) 0
redis> GET myotherkey
"World"
SORT
排序數據結構 list, set, sorted set 的 key. 官方文檔
示例
SORT mylist # 默認升序 key 為數字
SORT mylist DESC # 降序 key 為數字
SORT mylist ALPHA # 字典序 key 為字符串
SORT mylist LIMIT 0 10 # 分頁
SORT mylist LIMIT 0 5 ALPHA DESC # 選項組合
SORT mylist BY weight_* # 外部 KEY 排序 weight_1, weight_2, ...
SORT mylist BY nosort # 跳過排序 KEY, 獲取外部 KEY
SORT mylist BY weight_* GET object_* # 獲取指定外部 KEY, GET 選項可以使用多次, 獲取 GET 本身使用模式符 #, 如: SORT mylist BY weight_* GET object_* GET #
SORT mylist BY weight_* STORE resultkey # 存貯排序結果
SORT mylist BY weight_*->fieldname GET object_*->fieldname # 指定對象排序的 KEY
TOUCH
更新 KEY 的最后訪問時間, 若 KEY 不存在則忽略. 官方文檔
語法
TOUCH key [key ...]
返回值
- 返回被更新 KEY 的個數.
示例
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> TOUCH key1 key2
(integer) 2
TTL
獲取的 KEY 的過期時間. 官方文檔
語法
TTL key
返回值
- 指定 key 的過期時間
- -2 指定 key 不存在
- -1 指定 key 未設置過期時間
示例
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
** PTTL 同 TTL, 區別 PTTL 返回時間單位是毫秒**
TYPE
獲取指定 KEY 的數據類型. 官方文檔
語法
TYPE key
返回值
- 指定 key 的過期時間
- none 指定 key 不存在
示例
redis> SET key1 "value"
"OK"
redis> LPUSH key2 "value"
(integer) 1
redis> SADD key3 "value"
(integer) 1
redis> TYPE key1
"string"
redis> TYPE key2
"list"
redis> TYPE key3
"set"
UNLINK
同 DEL 指令, UNLINK 是從 KEY 空間中移除指定 KEY, 是內存級刪除非阻塞. 實際刪除將在后續持久化中發生. 官方文檔
語法
UNLINK key [key ...]
返回值
- 被移除 KEY 的數量.
示例
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> UNLINK key1 key2 key3
(integer) 2
WAIT (待完善)
阻塞當前客戶端直到之前所有寫命令被成功備份或到達指定的備份命令的數量, 若指定的超時(單位毫秒)到達將返回還未成功備份的命令數量. 官方文檔
語法
WAIT numreplicas timeout
- numreplicas 備份的數量
- timeout 阻塞超時時間
返回值
- 備份的數量
示例
> SET foo bar
OK
> WAIT 1 0
(integer) 1
> WAIT 2 1000
(integer) 1