昨天我們已經在電腦上安裝好 Redis 了,在昨天的文章中我們可以知道 Redis 支持多種數據結構。這些結構不僅使得數據存儲更加靈活,而且提供了豐富的操作,使得 Redis 適用於各種情境。接下來,我們將探討 Redis 的基本數據結構及其基本操作
首先我們要先進入 Redis 的命令列介面(CLI),在終端機輸入 -cli
$ -cli
127.0.0.1:6379>
Redis 預設提供 16 個資料庫,從 0 到 15。每個資料庫都是獨立的,你可以獨立地在每個資料庫中新增和查詢鍵值(Key-Value)
# 我想切換到第 15 個資料庫
127.0.0.1:6379> SELECT 15
OK
127.0.0.1:6379[15]> SELECT 0
OK
127.0.0.1:6379> # 回到原本預設的資料庫
# 目前的資料庫鍵值對數量為 0
127.0.0.1:6379> DBSIZE
(integer) 0
# 新增一筆
127.0.0.1:6379> SET key_1 value_1
OK
# 目前的資料庫鍵值對數量為 1
127.0.0.1:6379> DBSIZE
(integer) 1
# 先確認當前資料庫的值對數量為 1
127.0.0.1:6379> DBSIZE
(integer) 1
# 清空當前的資料庫
127.0.0.1:6379> FLUSHDB
OK
# 確認當前資料庫鍵值對數量為 0
127.0.0.1:6379> DBSIZE
(integer) 0
# 會清空全部資料庫的資料
127.0.0.1:6379> FLUSHALL
OK
SAVE
和 BGSAVE
都是 Redis 中用於創建數據快照的命令
快照
是 Redis 數據的二進制表示,儲存在磁盤上的 .rdb 文件中
這些快照可以用於數據恢復,因為當 Redis 重新啟動時,它會從最近的 .rdb 文件中加載數據
兩者的差別在於,SAVE
是同步將 Redis 數據保存到磁盤,可能會阻塞其他操作,而 BGSAVE
是異步地在後台保存數據,不會阻塞主伺服器
UNIX 時間 -> 從UTC1970年1月1日0時0分0秒起至現在的總秒數
127.0.0.1:6379> LASTSAVE
(integer) 1696933423
下面的指令的操作範圍都在當前的資料ㄎㄨ
# 先一次設定多個鍵值對
127.0.0.1:6379> MSET key1 value1 key2 value2 key3 value3 aa_1 value_1
OK
# 查詢當前資料庫所有的 KEY (使用 * 為通用符號,表示全選)
127.0.0.1:6379> KEYS *
1) "aa_1"
2) "key3"
3) "key2"
4) "key1"
# 查詢當前資料庫所有 k 開頭的 KEY
127.0.0.1:6379> KEYS k*
1) "key3"
2) "key2"
3) "key1"
# 查看有沒有 key1 跟 aa_1 的 鍵值對,回傳 2 代表兩個都存在
127.0.0.1:6379> EXISTS key1 aa_1
(integer) 2
# 查看有沒有 key1 跟 aa_1 跟 no_exist_key 的鍵值對,回傳 2 代表三個中只有兩個存在
127.0.0.1:6379> EXISTS key1 aa_1 no_exist_key
(integer) 2
# 查看有沒有 no_exist_key 的鍵值對,回傳 0 表示沒有
127.0.0.1:6379> EXISTS no_exist_key
(integer) 0
# 查看有沒有 aa_1 的鍵值對,回傳 1 表示有
127.0.0.1:6379> EXISTS aa_1
(integer) 1
# 查看 key1 的 value 是什麼資料型態 -> 回傳 string
127.0.0.1:6379> TYPE key1
string
# 查看 no_existed_key 的 value 是什麼資料型態 -> 回傳 none 代表 no_existed_key 不存在
127.0.0.1:6379> TYPE no_existed_key
none
# 刪除 key1 -> 回傳 1 表示成功
127.0.0.1:6379> DEL key1
(integer) 1
# 刪除 no_existed_key -> 回傳 0 表示原本的 no_existed_key 就不存在
127.0.0.1:6379> DEL no_existed_key
(integer) 0
(RENAME oldkey newkey)
# 現在資料庫中有 3 對鍵值對
127.0.0.1:6379> Keys *
1) "key3"
2) "key2"
3) "key1"
# 將 key1 重新命名為 key2
127.0.0.1:6379> RENAME key1 key2
OK
# 因為 key1 會覆蓋原本的 key2 所以資料庫中只剩下 2 對鍵值對
127.0.0.1:6379> Keys *
1) "key3"
2) "key2"
# 現在資料庫中有 2 對鍵值對
127.0.0.1:6379> Keys *
1) "key3"
2) "key2"
# 將 key2 重新命名為 key3,但是不會執行因為原本 key3 就存在,所以回傳 0
127.0.0.1:6379> RENAMENX key2 key3
(integer) 0
# 將 key2 重新命名為 key1,執行成功
127.0.0.1:6379> RENAMENX key2 key1
(integer) 1
# 所以現在資料庫中還是有 2 對鍵值對
127.0.0.1:6379> Keys *
1) "key3"
2) "key1"