Linux

Ubuntu Linux 安裝、設定 Redis 資料庫教學與範例

介紹如何在 Ubuntu Linux 中安裝與設定 Redis 資料庫。

Redis 是一種快速、開放原始碼的記憶體內鍵值資料結構存放區,以下是在 Ubuntu Linux 中安裝與設定 Redis 資料庫服務的操作步驟。

安裝 Redis 資料庫

Redis 資料庫伺服器套件已經被收錄在 Ubuntu Linux 的官方套件庫中,在 Ubuntu Linux 中可以直接使用 apt 安裝:

# 更新系統套件
sudo apt update

# 安裝 Redis 資料庫伺服器
sudo apt install redis-server

安裝好 Redis 伺服器套件之後,開啟 /etc/redis/redis.conf 這個 Redis 設定檔,將 supervised 參數設定為 systemd,這樣可以讓 Redis 資料庫伺服器跟 Ubuntu Linux 的 systemd 溝通:

# 由 systemd 控制 Redis 服務
supervised systemd

接著重新啟動 Redis 資料庫服務:

# 重新啟動 Redis 資料庫服務
sudo systemctl restart redis.service

這樣就完成基本的 Redis 資料庫伺服器的安裝了,接著查看 Redis 資料庫服務的狀態:

# 查看 Redis 資料庫服務狀態
systemctl status redis.service
● redis-server.service - Advanced key-value store
     Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-01-17 10:04:22 CST; 4min 29s ago
       Docs: http://redis.io/documentation,
             man:redis-server(1)
    Process: 1685 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
   Main PID: 1705 (redis-server)
      Tasks: 4 (limit: 19106)
     Memory: 1.9M
     CGroup: /system.slice/redis-server.service
             └─1705 /usr/bin/redis-server 127.0.0.1:6379

Jan 17 10:04:22 vm1624607004853-1933023-iaas systemd[1]: Starting Advanced key-value store...
Jan 17 10:04:22 vm1624607004853-1933023-iaas systemd[1]: redis-server.service: Can't open PID file /run/redis/redis-server.pid (yet?) after start: Operation not permitted
Jan 17 10:04:22 vm1624607004853-1933023-iaas systemd[1]: Started Advanced key-value store.

對於 Redis 資料庫服務的控制方式,就跟一般的系統服務一樣:

# 啟動 Redis 資料庫服務
sudo systemctl start redis.service

# 停止 Redis 資料庫服務
sudo systemctl stop redis.service

# 開機自動啟動 Redis 資料庫服務
sudo systemctl enable redis.service

# 取消開機自動啟動 Redis 資料庫服務
sudo systemctl disable redis.service

測試 Redis 資料庫

若要測試 Redis 資料庫是否可以正常使用,可以使用 redis-cli 這個 Redis 資料庫的命令列操作介面,執行之後就會進入互動式的指令操作介面:

# Redis 命令列操作介面
redis-cli
127.0.0.1:6379>

redis-cli 環境中,可以執行各項 Redis 的指令對資料庫進行操作,例如測試資料庫連線是否正常,可以執行 ping 指令:

ping
PONG

若執行 ping 之後,得到 PONG 的回應,就表示我們與 Redis 資料庫之間的連線是正常的。

接著測試存取鍵值,首先設定一個新的鍵值對應:

set mykey "My value."
OK

然後從 Redis 資料庫中取回 mykey 對應的值:

get mykey
"My value."

這樣就表示 Redis 資料庫式正常運作的,若要刪除剛剛建立的 mykey 鍵值對應,可以使用 del 指令:

del mykey
(integer) 1

若要離開 redis-cli 介面,可以執行 exit 指令:

exit

Redis 資料庫設定

在確認 Redis 資料庫正常可運作之後,可以考慮調整更進一步的設定,以下是在 /etc/redis/redis.conf 設定檔中,較常用的設定值與設定方式。

網路介面

bind 可以用來設定 Redis 資料庫所綁定的網路介面,若在設定檔中沒有以 bind 設定網路介面,Redis 預設會綁定所有的網路介面:

# 綁定網路介面
# bind 192.168.1.100 10.0.0.1
bind 127.0.0.1 ::1

若 Redis 伺服器是處於公開的網路環境,綁定所有網路介面是非常危險的事情,最常見的做法是指綁定本機的 loopback 網路位址。

連接埠

Redis 資料庫伺服器預設所使用的網路連接埠是 6379,亦可使用 port 設定來更改:

# 網路連接埠
port 6379

保護模式

Redis 的保護模式設定可以防止管理者使用不當的設定,讓伺服器暴露在高度風險中。

# 保護模式
protected-mode yes

當保護模式啟用時,如果設定檔中沒有使用任何 bind 明確指定綁定的網路介面,而且也沒有設定資料庫的密碼保護,則 Redis 就只允許從 IPv4、IPv6 的 loopback 位址(127.0.0.1::1)或 Unix domain sockets 的連線。

保護模式在預設的情況下是啟用的,只有當我們需要讓未經認證的遠端使用者來使用 Redis 資料庫時,才需要將保護模式關閉。

Unix Socket

除了透過網路介面提供連線之外,Redis 亦可由 Unix socket 來讓本機的使用者連線,而 Unix socket 的路徑可以使用 unixsocket 設定來指定:

# 指定 Unix Socket 路徑
unixsocket /var/run/redis/redis-server.sock

而使用 Unix socket 的檔案權限則由 unixsocketperm 指定:

# 指定 Unix Socket 權限
unixsocketperm 700

TCP 連線數上限

在高負載的伺服器中,若 TCP 連線數達到飽和狀態時,會讓連線的速度下降,此時可以調整 tcp-backlog 設定,提高允許同一時間 TCP 連線數上限:

# 同時 TCP 連線數上限
tcp-backlog 511

這個連線數上限值會跟 /proc/sys/net/core/somaxconn 比較,並取最小值,所以在調整時還必須注意 Linux 系統上 somaxconntcp_max_syn_backlog 的設定值。

連線逾時

timeout 可以設定連線逾時的門檻值:

# 連線逾時門檻值(單位為秒)
timeout 1

若此值設定為 0 則代表停用此功能。

以 Daemon 模式運行

在 Ubuntu Linux 中,通常我們都會以 systemd 來控制 Redis 資料庫,以 daemon 的方式放在系統上背景執行,所以 daemonize 會設定為 yes,而 supervised 則會設定為 systemd,這部分除非有特殊的原因,否則不需要更改。

# 以 Daemon 模式背景執行
daemonize yes

# 由 systemd 控制 Redis 服務
supervised systemd

而在 Daemon 模式之下,行程的 PID 會記錄在 pidfile 所指定的檔案中,這個設定通常也不需要更動:

# Redis 行程的 PID 檔案
pidfile /var/run/redis/redis-server.pid

記錄檔

Redis 資料庫的記錄檔位置可以由 logfile 來指定:

# 記錄檔位置
logfile /var/log/redis/redis-server.log

至於 Redis 的紀錄層級(要記錄哪一些事件),則可由 loglevel 控制:

# 記錄層級
loglevel notice

可用的記錄層級選項有:

  • debug:除錯等級,包含最詳盡的資訊,用於開發與測試階段。
  • verbose:詳細等級,包含大量細部資訊。
  • notice:正常等級,適用於正式運行環境。
  • warning:警告等級,只記錄重大的關鍵訊息。

若要將 Redis 的記錄資訊遞送至系統的 syslog,可以調整以下幾條設定:

# 啟用 syslog 記錄功能
syslog-enabled yes

# syslog 識別字
syslog-ident redis

# syslog 的 facility
syslog-facility local0

在預設的情況下,Redis 只有在互動式的環境之下啟動時會顯示 ASCII art logo,若希望在普通的記錄檔中也輸出 ASCII art logo,可以設定:

# 總是輸出 ASCII art logo
always-show-logo yes

資料庫數量

Redis 中的資料庫都是以數字編號來指定的,預設的資料庫是 0,使用者可以在 Redis 中使用 SELECT 指令來選擇要使用的資料庫,而資料庫的總數則可由 databases 設定來調整。

# Redis 資料庫數量
databases 16

資料庫的編號都是由 0 起算,若將 databases 設定為 16,則可用的資料庫編號則為 015,以此類推。

密碼認證

在大部分的應用中,Redis 都是在本機或是內部的環境下運行,所以通常不需要密碼認證,而如果想要啟用密碼認證功能,可以使用 requirepass 設定密碼:

# Redis 資料庫密碼
requirepass your_password

這裡的 your_password 要換成自己設定的密碼。由於 Redis 的 I/O 速度相當快,所以若要有密碼保護的效果,必須將密碼強度大幅提高,否則很容易被暴力法破解。

重新命名指令

在共用的 Redis 環境之下,我們可以將比較具有危險性的指令改為其他的名稱,讓不知道名稱的使用者無法使用該指令:

# 更改指令名稱
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

亦可將特定指令更名為空字串,直接停用該指令:

# 停用指令
rename-command CONFIG ""

參考資料

Share
Published by
Office Guide
Tags: Redis

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

11 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

11 個月 ago