Skip to main content
Redis 是記憶體式的 key-value store,也是 Laravel 眾多功能的後端。 本文從設定到操作、Pub/Sub 為止,解說如何在 Laravel 中使用 Redis。

快取

將 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.phpredis 陣列管理。

環境變數

.env 中設定連線目標。
也可以用 URL 格式指定。

TLS / SSL 連線

使用 TLS 加密時,可指定 scheme 選項。

Cluster

要以叢集使用多台 Redis 伺服器時,使用 clusters 鍵。
預設 options.clusterredis,會使用原生 Redis clustering。 自動處理 failover,是正式環境的建議設定。 若要用 Predis 使用 client-side sharding,可移除 options.cluster。 但 client-side sharding 不處理 failover,因此只適合快取等暫時性資料。

Predis 的設定

要使用 Predis,安裝 predis/predis 套件並將 REDIS_CLIENT 改為 predis
可加入 Predis 特有的連線參數

Predis 的重試設定

Predis 3.4.0 以後可使用內建的重試與 backoff 設定。以 max_retries 選項設定重試次數,以 retry 選項設定 backoff 策略。retry 選項需以 NoBackoffEqualBackoffExponentialBackoff 其中之一的類別名稱作為 key 的陣列指定。
在 Redis cluster 使用 Predis 時,可於 cluster 設定的 parameters 選項設定重試。

PhpRedis 的設定

PhpRedis 透過 PECL 安裝(Laravel Sail 已內建)。 PhpRedis 支援以下額外選項: namepersistentpersistent_idprefixread_timeoutretry_intervalmax_retriesbackoff_algorithmbackoff_basebackoff_captimeoutcontext

重試與 Backoff 設定

設定連線失敗時的重試行為。 支援的 backoff 演算法:defaultdecorrelated_jitterequal_jitterexponentialuniformconstant

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 地執行。
交易中無法從 Redis 取值。 因為整個 closure 會執行完再以 EXEC 一次執行。

Lua 腳本

eval() 方法可以 atomic 地執行 Lua 腳本。 比交易更靈活,可在腳本中參照及更新 Redis 的值。
引數順序:Lua 腳本 → key 數量 → key 名稱… → 追加引數… KEYS[1]KEYS[2] 為 key 名稱,ARGV[1] 起為追加引數。

Pipeline

可一次傳送大量指令,減少網路來回。
Pipeline 只是把指令合併傳送,並非 atomic。 若需要 atomic 操作,請使用交易或 Lua 腳本。

Pub / Sub

可透過 Redis 的 publish / subscribe 指令,經由 channel 收發訊息。

Subscriber

subscribe() 是長時間運作的 process,應在 Artisan 指令內呼叫。

Publisher

從其他請求或 process 送出訊息。

Wildcard 訂閱

psubscribe() 可進行樣式比對的訂閱。

總結

  • 正式環境:PhpRedis(PECL extension、高效能)
  • 開發環境/難以安裝時:Predis(Composer 套件)
  • Laravel Sail:預設已安裝 PhpRedis
  • config/database.php 定義多個 Redis 連線,依用途分開使用(如 default / cache
  • 叢集環境使用 clusters
  • 正式環境考量 TLS 連線與認證資訊設定
最後修改於 2026年8月2日