iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
自我挑戰組

Hello SQL 初次見面你好系列 第 25

Day25 Redis 的基本操作

  • 分享至 

  • xImage
  •  

昨天我們已經在電腦上安裝好 Redis 了,在昨天的文章中我們可以知道 Redis 支持多種數據結構。這些結構不僅使得數據存儲更加靈活,而且提供了豐富的操作,使得 Redis 適用於各種情境。接下來,我們將探討 Redis 的基本數據結構及其基本操作

Redis 的資料庫操作

首先我們要先進入 Redis 的命令列介面(CLI),在終端機輸入 -cli

$ -cli

127.0.0.1:6379>

1. 切換資料庫 (SELECT)

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> # 回到原本預設的資料庫

2. 得到目前資料庫的鍵值對數量 (DBSIZE)

# 目前的資料庫鍵值對數量為 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

3. 清空當前資料庫的資料 (FLUSHDB)

# 先確認當前資料庫的值對數量為 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

4. 清空全部資料庫的資料 (FLUSHALL)

# 會清空全部資料庫的資料
127.0.0.1:6379> FLUSHALL
OK

5. 將 Redis 中的所有數據保存到磁盤 (SAVE / BGSAVE)

SAVEBGSAVE 都是 Redis 中用於創建數據快照的命令

快照 是 Redis 數據的二進制表示,儲存在磁盤上的 .rdb 文件中
這些快照可以用於數據恢復,因為當 Redis 重新啟動時,它會從最近的 .rdb 文件中加載數據

兩者的差別在於,SAVE 是同步將 Redis 數據保存到磁盤,可能會阻塞其他操作,而 BGSAVE 是異步地在後台保存數據,不會阻塞主伺服器

6. 最後一次成功保存的 UNIX 時間

UNIX 時間 -> 從UTC1970年1月1日0時0分0秒起至現在的總秒數
127.0.0.1:6379> LASTSAVE
(integer) 1696933423

Redis 的通用資料操作

下面的指令的操作範圍都在當前的資料ㄎㄨ

1. 查詢符合格式的 Key (KEYS [pattern])

# 先一次設定多個鍵值對
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"

2. 查看一個或是多個 key 是否存在 (EXISTS key1 [key2 ...])

# 查看有沒有 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

3. 查看 key 的 value 是什麼型態 (TYPE key)

# 查看 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

4. 刪除一個或是多個 key (DEL key1 [key2 ...])

# 刪除 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

5. 重新命名 key (RENAME / RENAMENX)

  • RENAME
  • 用於將一個 key 的名稱更改為另一個名稱 (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"
  • RENAMENX
  • RENAMENX 也是用於重新命名 key,但只在 newkey 不存在時執行
# 現在資料庫中有 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"

上一篇
Day 24 安裝與設定 Redis
下一篇
Day 26: Redis 中資料型態的基本操作(上)
系列文
Hello SQL 初次見面你好30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言