快取
將 Redis 作為快取 driver 使用
Queue
將 Redis 作為 queue driver 使用
Broadcasting
以 Pub/Sub 進行即時通訊
什麼是 Redis
Redis 是開源的高速 key-value store。 支援字串、hash、list、set、sorted set 等多樣資料結構,也被稱為資料結構伺服器。 Laravel 中會將 Redis 用於下列用途:選擇 Client
Laravel 支援 PhpRedis(PHP extension)與 Predis(PHP 套件)兩種 client。Laravel 13 的預設 client 為 PhpRedis。正式環境建議使用 PhpRedis。
使用 Laravel Sail 時已經安裝好 PhpRedis。
設定
config/database.php
Redis 的設定於config/database.php 的 redis 陣列管理。
環境變數
在.env 中設定連線目標。
TLS / SSL 連線
使用 TLS 加密時,可指定scheme 選項。
Cluster
要以叢集使用多台 Redis 伺服器時,使用clusters 鍵。
options.cluster 為 redis,會使用原生 Redis clustering。
自動處理 failover,是正式環境的建議設定。
若要用 Predis 使用 client-side sharding,可移除 options.cluster。
但 client-side sharding 不處理 failover,因此只適合快取等暫時性資料。
Predis 的設定
要使用 Predis,安裝predis/predis 套件並將 REDIS_CLIENT 改為 predis。
Predis 的重試設定
Predis 3.4.0 以後可使用內建的重試與 backoff 設定。以max_retries 選項設定重試次數,以 retry 選項設定 backoff 策略。retry 選項需以 NoBackoff、EqualBackoff、ExponentialBackoff 其中之一的類別名稱作為 key 的陣列指定。
parameters 選項設定重試。
PhpRedis 的設定
PhpRedis 透過 PECL 安裝(Laravel Sail 已內建)。 PhpRedis 支援以下額外選項:name、persistent、persistent_id、prefix、read_timeout、retry_interval、
max_retries、backoff_algorithm、backoff_base、backoff_cap、timeout、context
重試與 Backoff 設定
設定連線失敗時的重試行為。 支援的 backoff 演算法:default、decorrelated_jitter、equal_jitter、exponential、uniform、constant
Unix socket 連線
連線同一台伺服器上的 Redis 時,使用 Unix socket 可降低 TCP overhead。序列化與壓縮
PhpRedis 可設定所儲存資料的序列化與壓縮演算法。
支援的壓縮演算法:
與 Redis 的互動
Redis facade
可透過Redis facade 執行所有 Redis 指令。
facade 會以 magic method 將指令轉發到 Redis 伺服器。
command 方法明確指定指令名稱與引數。
使用多個連線
可在config/database.php 定義多個 Redis 連線,並以 connection() 方法切換。
交易(Transaction)
transaction() 方法會包裝 Redis 的 MULTI/EXEC 指令。
closure 內的所有指令會被 atomic 地執行。
Lua 腳本
以eval() 方法可以 atomic 地執行 Lua 腳本。
比交易更靈活,可在腳本中參照及更新 Redis 的值。
KEYS[1]、KEYS[2] 為 key 名稱,ARGV[1] 起為追加引數。
Pipeline
可一次傳送大量指令,減少網路來回。Pub / Sub
可透過 Redis 的publish / subscribe 指令,經由 channel 收發訊息。
Subscriber
subscribe() 是長時間運作的 process,應在 Artisan 指令內呼叫。
Publisher
從其他請求或 process 送出訊息。Wildcard 訂閱
psubscribe() 可進行樣式比對的訂閱。
總結
Client 選擇
Client 選擇
- 正式環境:PhpRedis(PECL extension、高效能)
- 開發環境/難以安裝時:Predis(Composer 套件)
- Laravel Sail:預設已安裝 PhpRedis
連線設定要點
連線設定要點
- 在
config/database.php定義多個 Redis 連線,依用途分開使用(如default/cache) - 叢集環境使用
clusters鍵 - 正式環境考量 TLS 連線與認證資訊設定
操作的分工
操作的分工