Redis 設定檔是決定伺服器性能和運作方式的核心要素。在其中,利用 include 指令可以有效且靈活地管理設定檔。我們將探討 include 為什麼有用以及如何使開發者的生活更輕鬆

1. 設定檔「拆分」的意義

Redis 透過單一檔案 /etc/redis/redis.conf 管理所有設定。然而,隨著伺服器運行環境的複雜度增加,單一設定檔無法應對所有情況。

例如:

  • 在開發伺服器和運行伺服器上記憶體限制值必須不同
  • 在特定伺服器上需要禁用資料持久化設定
  • 在測試環境中需要優化磁碟性能的設定

將所有這些需求集中在一個設定檔中,將使得設定檔過於繁雜,並增加出錯的可能性。

而這時,include 的功能顯得尤其重要。include 使我們能夠「拆分」設定檔,並在保留共用設定的同時,額外套用伺服器特定的設定

2. 為什麼它有用?

(1) 安全性:錯誤影響最小

修改 Redis 設定檔始終讓人感到壓力,特別是在運行環境中,一個小小的錯誤都可能引發致命的故障。

使用 include 可以將設定檔拆分為多個部分進行管理,即使僅更改特定伺服器的設定,也不會影響基本設定。

例如,如下所示地拆分設定檔:

# /etc/redis/redis.conf
maxmemory 512mb
save 900 1
include /etc/redis/server1.conf
# /etc/redis/server1.conf
maxmemory 1gb

只需修改運行伺服器的 /etc/redis/server1.conf。即使出現問題,/etc/redis/redis.conf 的基本設定依然保持不變,故恢復會簡單得多。

(2) 彈性:易於根據伺服器環境調整設定

運行環境不可能始終相同。有時,特定伺服器的設定是必需的,有時候則需要在新的環境中應用試驗性設定。

使用 include,我們可以:

  • 開發伺服器: /etc/redis/development.conf
  • 運行伺服器: /etc/redis/production.conf
  • 測試伺服器: /etc/redis/test.conf

這樣可以根據環境拆分設定檔,在需要時僅載入相關設定。

進一步說,還可以創建一個管理設定檔的目錄,並使用 include 指令一次性載入:

include /etc/redis/conf.d/*.conf

這樣,conf.d/ 目錄中新增的設定檔也會自動套用,從而大大簡化設定管理。

(3) 降低風險,實驗新設定

在不干擾現有設定的情況下,進行新設定的實驗時,include 也是一個有用的工具。

例如,要更改 save 選項,我們可以編寫一個新的設定檔來代替舊的設定檔:

# /etc/redis/redis.conf
include /etc/redis/experimental.conf

這樣僅需測試新的設定,並且如果出現問題,因為不涉及基本設定,所以能快速恢復到原始狀態。

3. 如何利用它?

(1) 利用優先順序進行設定管理

Redis 依據處理順序來讀取設定檔。因此,如果在多個檔案中出現同一設定項,最後處理的設定將獲得優先權

示例 1:覆蓋基本設定
# /etc/redis/redis.conf
maxmemory 512mb
include /etc/redis/server1.conf
# /etc/redis/server1.conf
maxmemory 1gb

最終,maxmemory 將被設置為 1GB。

示例 2:保持基本設定
# /etc/redis/redis.conf
include /etc/redis/server1.conf
maxmemory 512mb

在這種情況下,maxmemory 將保持為預設的 512MB。

(2) 基於目錄的設定管理

要管理多個伺服器或環境的設定,請將文件按目錄劃分,並在文件名稱中反映優先級:

/etc/redis/conf.d/
├── 01-default.conf
├── 02-dev.conf
├── 03-prod.conf

這樣,將按 01-default.conf02-dev.conf03-prod.conf 的順序應用設定。

4. 總結:使用 "include" 的好處

  • 能將設定檔拆分,以安全地管理
  • 能根據伺服器和環境要求靈活地應用設定。
  • 在最低化風險的情況下進行新設定的實驗。

Redis 設定檔雖然簡單,但利用 include 可以在複雜的環境中進行清晰的管理。現在,你也可以將設定檔「拆分」進行更安全和靈活的管理!

Developer working with Redis configuration files