前幾篇我們介紹了 Redis 的一些概念和操作方式,都是偏向如何使用 Redis。所以這篇就要來介紹如何管理 Redis Server。
Server 管理指令
Info
Info 可以取得 Server 上的各種資訊和統計數值。
1 | 127.0.0.1:6379> info [section] |
section 可以指定只要顯示哪部分的訊息,例如 : CPU、Memory 等等。若沒指定 section 則會全部顯示。
範例 :
1 | 127.0.0.1:6379> info CPU |
詳細顯示的內容分別代表什麼請參考 Redis 官網。
Bgrewriteaof
Bgrewriteaof (Begin Rewrite AOF) 用於以異步的方式執行一個 AOF(Append Only File)文件的重寫。AOF 是一個儲存指令的文件,他會將所有有寫入要求的指令紀錄起來,在下次 Redis 重新啟動時再把這些指令從頭到尾執行一遍,就可以恢復重新啟動前的資料。
1 | 127.0.0.1:6379> bgrewriteaof |
在 Redis 2.4 開始 AOF 重寫會由 Redis 自動觸發,Bgrewriteaof 仍可以用於手動觸發執行。
Bgsave
Bgsave 用於以異步的方式儲存當下的資料到硬碟。
1 | 127.0.0.1:6379> bgsave |
Bgsave 會在 Redis 的安裝目錄下產生一個 dump.rdb
的檔案用於儲存資料再重起時讀取。檔案的位置可以使用 config get dir
來獲得。
上述介紹的 Bgrewriteaof 和 Bgsave 正是用來實現 Redis 持久化的作法,也就是當 Server 被關機了之後再重新啟動資料不會遺失。至於該用哪一個 Redis 官方也有針對兩種做法提出優缺點,但是官方還是建議兩種都使用,這樣可以提高持久化的效果。
詳細的比較之後會在另一篇作介紹和說明。
Save
Save 用於以同步的方式儲存當下的資料到硬碟。通常儲存到硬碟會由 Bgsave 指令來執行,但是如果負責保存資料的後台子 Process 出現問題時,還可以用 Save 作為最後手段。
1 | 127.0.0.1:6379> save |
Lastsave
Lastsave 會顯示上一次儲存資料到硬碟的時間,以 Unix Timestamp 顯示。可以在 Bgsave 執行完後使用 Lastsave 來追蹤 Bgsave 是否完成。
1 | 127.0.0.1:6379> lastsave |
Client
Client 可以用來查看和設定客戶端的相關資訊。Client 支援以下幾種指令 :
Getname
Getname 用於取得客戶端的名稱,不過新進的連線預設是沒有名字的所以會回傳 nil。
1 | 127.0.0.1:6379> client getname |
Setname
Setname 用於設定客戶端的名稱。
1 | 127.0.0.1:6379> client setname <name> |
範例 :
1 | 127.0.0.1:6379> client getname |
List
List 用於列出所有連線到 Redis Server 的客戶資訊。
1 | 127.0.0.1:6379> client list |
範例 :
1 | 127.0.0.1:6379> client list |
可以看到列出來的客戶資訊,name 是 c1,正是前面介紹 setname 所設定的名稱。
Kill
Kill 用於關閉客戶端的連線。
1 | 127.0.0.1:6379> client kill <addr> |
addr 是客戶端的 ip:port。
範例 :
1 | 127.0.0.1:6379> client list |
Config
Config 用於設定 Redis 的一些配置設定,在 Redis (一) - 基本概念 這篇我們有介紹過如何查看和修改配置。這裡我們介紹另外兩個指令。
Rewrite
Rewrite 用於重寫 redis.conf,因為使用 config set 所修改的配置可能會和 redis.conf 的文件描述不同,所以需要透過 Rewrite 指令來將配置重新寫入到 redis.conf。
1 | 127.0.0.1:6379> config rewrite |
config get 和 config set 所使用的格式和 redis.conf 有一些是不同的,例如 :
- 15kb、20gb 這些儲存單位縮寫不可以用在 Config 指令,config set 只能用數字表示。例如 : 1k 要寫成 1000。
- 配置參數 save 在 redis.conf 是多行儲存,但是用 config get 只會顯示出一行。
範例 :
1 | 127.0.0.1:6379> config get maxclients |
Resetstat
Resetstat 用於重設 Info 命令中的一些統計數據。
1 | 127.0.0.1:6379> config resetstat |
詳細會重設哪些數據請參考 Redis 官網。
Dbsize
Dbsize 用於顯示目前的 DB 的 Key 總數。
1 | 127.0.0.1:6379> dbsize |
範例 :
1 | 127.0.0.1:6379> dbsize |
Debug Object
Debug Object 用於取得更多 Key 的訊息。主要用於除錯使用。
1 | 127.0.0.1:6379> debug object <key> |
範例 :
1 | 127.0.0.1:6379> debug object dbk1 |
詳細的輸出訊息請參考 Redis 官網。
Debug Segfault
Debug Segfault 用於開發時模擬 Bug 發生,他會執行一個不合法的 Memory Accsee 讓 Redis 掛掉。
範例 :
1 | 127.0.0.1:6379> debug segfault |
Flushdb
Flushdb 會清空目前所在的 DB 的所有 Key,其他的 DB 不受影響,但是在使用上還是要小心使用。此外這個命令不會失敗。
1 | 127.0.0.1:6379> flushdb |
範例 :
1 | 127.0.0.1:6379> dbsize |
Flushall
Flushall 會清空整個 Redis Server 的 Key,也就是所有的 DB 都會被清空。所以使用上要非常謹慎,而這個命令一樣也不會失敗。
1 | 127.0.0.1:6379> flushall |
Monitor
Monitor 會即時的輸出 Redis Server 收到指令。
1 | 127.0.0.1:6379> monitor |
範例 :
另外開啟一個 terminal 連線到 Redis Server,並輸入一些指令。再回到原本的 terminal 就可以看到指令都被輸出了。
1 | 127.0.0.1:6379> monitor |
Sync
Sync 用於同步主 Server 和其他的附屬 Server 。
1 | 127.0.0.1:6379> sync |
範例 :
1 | 127.0.0.1:6379> sync |
Shutdown
Shutdown 用於關閉 Redis Server,命令執行時會執行以下這些操作 :
- 所有客戶端會被中斷
- 如果至少有一個保存點在等待,會執行 Save 指令來儲存
- 如果 AOF 有被打開,會更新 AOF 文件
- 關閉 Redis Server
1 | 127.0.0.1:6379> shutdown [NOSAVE|SAVE] |
save 是可以選擇是否要做的,若選擇 Save 會強制執行儲存,若選擇 Nosave 就不會儲存資料,相當於強制關閉 Server。
Slaveof
Slaveof 可以將目前的 Redis Server 轉換為某個 Redis Server 的附屬 Server。
1 | 127.0.0.1:6379> slaveof <host> <port> |
如果目前的 Server 已經是某個主 Server 的附屬 Server,在設定完 slaveof 之後,這台 Server 就不會在跟原本的主 Server 進行同步。
範例 :
1 | 127.0.0.1:6379> slaveof 127.0.0.1 6379 |
如果想讓某個附屬 Server 變成主 Server 可以設定 No One 來斷開主 Server,如下 :
1 | 127.0.0.1:6379> slaveof no one |
Slowlog
Slowlog 用來紀錄查詢指令的執行時間的日誌系統,也就是如果有指令執行時間超過設定的時間就會被紀錄下來。
1 | 127.0.0.1:6379> slowlog <subcommand> <argument> |
subcommand 有以下幾種指令可以選擇 :
Get
Get 用於取得 SlowLog
1 | 127.0.0.1:6379> slowlog get <argument> |
argument 可以指定要輸出顯示的 Slowlog 數量,未指定則輸出全部。
範例 :
首先為了測試要先將設定檔的 slowlog-log-slower-than 改成 10 微秒
1 | 127.0.0.1:6379> config get slowlog-log-slower-than |
接著執行任意指令後再使用 slowlog get 來取得 Slowlog。
1 | 127.0.0.1:6379> set k2 v2 |
Len
Len 用來查看目前的 Slowlog 數量。
1 | 127.0.0.1:6379> slowlog len |
範例 :
1 | 127.0.0.1:6379> slowlog len |
在 redis.conf 設定檔裡有 slowlog-max-len 這項設定,是用來設定 Slowlog 允許的最大紀錄數量。
範例 :
1 | 127.0.0.1:6379> config get slowlog-max-len |
Reset
Reset 用於清空 Slowlog。
1 | 127.0.0.1:6379> slowlog reset |
範例 :
1 | 127.0.0.1:6379> slowlog len |
Summary
這一篇我們介紹了許多管理 Redis Server 會用到的指令,若想知道更詳細的內容請參考 Redis 官網。
參考
[1] Redis持久化----RDB和AOF 的區別
[2] Redis Server
[3] Redis 的使用規範