laravel 10 不控制 redis 持久化,完全由 redis 服务端配置(rdb/aof)决定;phpredis 仅为客户端,仅发送 set/expire 等命令,不参与落盘逻辑。

phpredis 持久化不是 Laravel 控制的
Laravel 10 本身不提供、也不干预 Redis 的持久化策略——那是 Redis 服务端的配置职责。Laravel 只通过 phpredis 扩展与 Redis 通信,写入缓存或队列时只调用 SET、EXPIRE 等命令,是否落盘、何时落盘,完全取决于你本地或远程 Redis 实例的 redis.conf 配置。
必须在 redis.conf 中启用 RDB 或 AOF
若你用的是官方 Redis 服务(非内存模拟器),需手动编辑其配置文件启用至少一种持久化方式:
- RDB(快照):设置
save 900 1(900 秒内至少 1 次修改则保存)、dbfilename dump.rdb、dir /var/lib/redis - AOF(追加日志):开启
appendonly yes,并选配appendfsync everysec(平衡性能与安全性) - 两者可共存:Redis 启动时优先加载 AOF(如果存在且完整),否则回退到 RDB
改完后必须重启 Redis 进程:sudo systemctl restart redis,仅 reload 配置不生效。
phpredis 扩展本身不带持久化逻辑
phpredis 是纯客户端扩展,它不保存数据、不管理磁盘、不决定何时刷盘。它的作用仅限于:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 建立 TCP 连接(或 Unix socket)
- 序列化 PHP 值为 Redis 协议格式
- 发送命令(如
SET user:123 "json..." EX 3600) - 解析响应,返回结果给 Laravel 缓存驱动
也就是说,即使你用 Cache::put('key', $value, 3600),Laravel 调用的是 phpredis::setEx(),最终执行的仍是 Redis 服务端的 SETEX 命令——而该命令是否被持久化,只看 Redis 配置里有没有开 RDB/AOF。
验证持久化是否生效的最简方式
别依赖 Laravel 日志或缓存命中率,直接查 Redis 本体:
- 停掉 Redis:
sudo systemctl stop redis - 检查
/var/lib/redis/dump.rdb或/var/lib/redis/appendonly.aof文件修改时间是否更新 - 重启 Redis 后,用
redis-cli KEYS "*"看之前设的带 TTL 的 key 是否还在——如果开了 AOF +appendfsync always,哪怕刚 set 就 crash,也可能恢复;但默认everysec下最多丢 1 秒数据
真正容易被忽略的点是:很多开发环境用 Docker 运行 Redis,默认配置通常关闭持久化,且容器重启后数据全丢——这不是 Laravel 或 phpredis 的问题,而是没挂载卷、没配 redis.conf。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










