跳转到主要内容
Redis 是一款内存型的键值存储,是 Laravel 众多功能的后端选择。 本文介绍从配置到操作,再到 Pub/Sub 的完整用法。

缓存

将 Redis 作为缓存驱动

队列

将 Redis 作为队列驱动

广播

通过 Pub/Sub 实现实时通信

什么是 Redis

Redis 是一款开源的高性能键值存储。 它支持字符串、哈希、列表、集合、有序集合等多种数据结构,因此也被称作数据结构服务器。 Laravel 中 Redis 通常用于以下用途。

选择客户端

Laravel 支持两种客户端:PhpRedis(PHP 扩展)和 Predis(PHP 库)。
Laravel 13 的默认客户端是 PhpRedis。生产环境推荐使用 PhpRedis。 使用 Laravel Sail 时 PhpRedis 已经预装。

配置

config/database.php

Redis 的配置放在 config/database.phpredis 数组中。

环境变量

.env 中配置连接信息。
也支持使用 URL 形式配置。

TLS / SSL 连接

若要使用 TLS 加密,请指定 scheme 选项。

集群

以集群方式使用多台 Redis 时使用 clusters 键。
默认情况下 options.clusterredis,使用原生的 Redis 集群模式, 它会自动处理故障切换,适合生产环境。 如果使用 Predis 的客户端侧分片,请删除 options.cluster。 但客户端侧分片不处理故障切换,只适合缓存等一次性数据。

Predis 的配置

使用 Predis 需要安装 predis/predis 并把 REDIS_CLIENT 改为 predis
可以指定 Predis 特有的连接参数

Predis 的重试设置

Predis 3.4.0 及以上版本内置了重试与退避设置。使用 max_retries 设置重试次数,retry 设置退避策略。retry 选项接收一个数组,其中键是 NoBackoffEqualBackoffExponentialBackoff 的类名。
在 Redis 集群下使用 Predis 时,通过集群设置里的 parameters 选项配置重试。

PhpRedis 的配置

PhpRedis 通过 PECL 安装(Laravel Sail 已预装)。 它还支持以下额外选项: namepersistentpersistent_idprefixread_timeoutretry_intervalmax_retriesbackoff_algorithmbackoff_basebackoff_captimeoutcontext

重试与退避设置

用来配置连接失败时的重试行为。 支持的退避算法有:defaultdecorrelated_jitterequal_jitterexponentialuniformconstant

使用 Unix 套接字

当 Redis 与应用在同一台机器上时,通过 Unix 套接字连接可以减少 TCP 开销。

序列化与压缩

PhpRedis 允许配置存储数据的序列化和压缩算法。
支持的序列化器: 支持的压缩算法:

与 Redis 交互

Redis Facade

通过 Redis Facade 可以执行任何 Redis 命令。 Facade 通过魔术方法把命令转发给 Redis 服务器。
带参数的命令直接以方法参数传入。
也可以通过 command 方法显式指定命令名和参数。

多连接切换

可以在 config/database.php 中定义多个 Redis 连接,通过 connection() 方法切换。

事务

transaction() 方法封装了 Redis 的 MULTI/EXEC。 闭包中的所有命令会原子地执行。
事务中无法从 Redis 读取值。 因为整个闭包会在收到 EXEC 后一次性执行。

Lua 脚本

eval() 方法可以原子性地执行 Lua 脚本。 比事务更灵活,脚本内可以引用与更新 Redis 中的值。
参数顺序:Lua 脚本 → 键数量 → 键名… → 附加参数… KEYS[1]KEYS[2] 是键名,ARGV[1] 起是附加参数。

管道(Pipeline)

一次性发送大量命令,可减少网络往返。
管道只是打包发送命令,不保证原子性。 如果需要原子性,请使用事务或 Lua 脚本。

Pub / Sub

Redis 的 publish / subscribe 命令可用于通过频道传递消息。

订阅者

subscribe() 是一个长时间运行的过程,通常在 Artisan 命令中调用。

发布者

从其他请求或进程中发送消息。

通配符订阅

使用 psubscribe() 可以按模式匹配进行订阅。

小结

  • 生产环境:PhpRedis(PECL 扩展,性能好)
  • 开发环境或不方便安装扩展:Predis(Composer 包)
  • Laravel Sail:默认已包含 PhpRedis
  • 多个 Redis 连接在 config/database.php 中按用途分开(default / cache 等)
  • 集群环境使用 clusters
  • 生产环境建议开启 TLS 并配置认证信息
最后修改于 2026年7月18日