上一篇介紹了 Redis 的基本概念和資料型態,這篇要來介紹 Key 如何管理與操作。
Key 指令
Redis 的 Key 指令可以用來管理 Key,上一篇介紹了 Redis 支援的資料型態,這些資料型態都是由一個 Key 去對應一個或多個值。所以都適用 Key 指令來管理。
Set
Set 指令是最基本建立 String 的指令,其他類型在上一篇有介紹對應的建立指令。
1 | 127.0.0.1:6379> set <key> <value> |
Del
Del 用於刪除已經存在的 Key,可以一次指定刪除多個。
1 | 127.0.0.1:6379> del key1 key2 ... |
範例 :
1 | 127.0.0.1:6379> set mobile iphone |
Dump
Dump 用於序列化給的 Key 的 Value,並回傳輸出序列化後的值。
1 | 127.0.0.1:6379> dump key |
範例 :
1 | 127.0.0.1:6379> hset Tom sex male phone 0912345678 |
Exists
Exists 用於檢查 Key 是否存在。
1 | 127.0.0.1:6379> exists <key1> <key2> ... |
範例 :
1 | 127.0.0.1:6379> exists Tom |
Expire
Expire 指令用於設定 Key 的過期時間,當 Key 過期後就會被刪除不可以再使用。設定的時間以秒為單位。
1 | 127.0.0.1:6379> expire <key> <seconds> |
範例 :
1 | 127.0.0.1:6379> set Tom 123 |
另有 pexpire
來設定過期時間,時間單位為毫秒。
Expireat
Expireat 和 Expire 一樣用於設定 Key 的過期時間,差別在於時間的格式是給 Unix Timestamp。
1 | 127.0.0.1:6379> expireat key timestamp |
範例 :
1 | 127.0.0.1:6379> expireat Tom 1594909320 |
另有 pexpireat
來設定過期時間,時間單位為毫秒。
Keys
Keys 用於查詢所有符合給定的 pattern 的 Key。
1 | 127.0.0.1:6379> keys <pattern> |
範例 :
1 | 127.0.0.1:6379> set Tom 20 |
在 pattern 前後加上 *
可以查詢相似的 Key。
1 | 127.0.0.1:6379> keys Tom* |
pattern 給 *
可以列出所有的 Key。
1 | 127.0.0.1:6379> keys * |
Move
Move 用於將目前所在的 DB 移動到指定的 DB。
1 | 127.0.0.1:6379> move <key> <db> |
範例 :
1 | // Redis 預設的 DB 是 0 |
當兩個 DB 都有相同的 Key 會移動失敗,如下。最後 move 指令回傳 0 代表失敗。
1 | 127.0.0.1:6379[1]> select 0 |
Persist
Persist 用於移除指定給 Key 的過期時間,讓 Key 永遠不會過期。
1 | 127.0.0.1:6379> persist <key> |
範例 :
1 | 127.0.0.1:6379> set pony 20 EX 60 |
set 指令後面所接的 EX 可以直接設定過期時間,也可以用 setex 指令。
可以看到第一個 set 指令設定給 pony 60 秒,所以馬上再下 persist 還可以移除 pony 的過期時間,但是第二個 set 指令只設定給 pony 1 秒,當過期了 Key 被刪除了就沒辦法再進行操作了。
TTL
TTL 以秒為單位回傳 Key 剩餘的過期時間。
1 | 127.0.0.1:6379> ttl <key> |
範例 :
1 | 127.0.0.1:6379> setex pony 120 24 |
另有 pttl
以毫秒回傳 Key 剩餘的過期時間。
Randomkey
Randomkey 會隨機回傳 DB 中的一個 Key。
1 | 127.0.0.1:6379> randomkey |
範例 :
1 | 127.0.0.1:6379> keys * |
Rename
Rename 可以重新對 Key 命名。
1 | 127.0.0.1:6379> rename <key> <newkey> |
範例 :
1 | 127.0.0.1:6379> set pony 24 |
如果新的 Key 已經存在時,還是可以執行 Rename,但是新 Key 的 Value 會被覆蓋掉,如下,原本 PonyNew 的 Value 是 24,再 pony 重新命名之後, ponyNew 的 Value 被換成 30 了。
1 | 127.0.0.1:6379> get ponyNew |
呈上,Rename 要謹慎使用,最好先檢查要換的新 Key 名稱有沒有人用,可以先用 exists 檢查。
Renamenx
Renamenx 也是幫 Key 重新命名,但是 Renamenx 會先檢查新的 Key 名稱是否存在,如果不存在才會執行。這也解決了 Rename 容易不小心覆蓋到其他 Key 的問題。
1 | 127.0.0.1:6379> renamenx <key> <newkey> |
範例 :
1 | 127.0.0.1:6379> get ponyNew |
Type
Type 會顯示指定的 Key 的類型。
1 | 127.0.0.1:6379> type <key> |
範例 :
1 | 127.0.0.1:6379> set pony 1 |
若 Key 不存在會回傳 none。
Scan
Scan 用於迭代 DB 中的 Key,每次會回傳一個新的游標位置表示目前迭代到哪。
1 | 127.0.0.1:6379> scan <cursor> MATCH <pattern> COUNT <count> TYPE <type> |
cursor 是游標的位置,剩下的都是可以選擇要不要加。match 有加只會輸出符合 pattern 的 Key。Count 預設是迭代 10 筆。TYPE 可以選擇只要那些類型的 Key。
範例 :
1 | 127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 |
加入 Match 指定輸出要符合的 Pattern。
1 | 127.0.0.1:6379> scan 0 match k1* |
加入 Count 指定要迭代的筆數。
1 | 127.0.0.1:6379> scan 0 count 5 |
加入 Type 指定輸出要符合的資料型態。
1 | 127.0.0.1:6379> hset k20 f1 v1 f2 v2 |
Summary
這一篇介紹了許多 key 的指令來管理和操作這些建立出來的 Key,這些只是較常用到的,更多 Key 的指令請參考 Redis 官網。
參考
[1] Redis Commands
[2] Redis 键(key)