Laravel使用Redis缓存需确保驱动启用、配置正确且服务可达,否则Cache::get()静默返回null;须配置config/cache.php的default为redis,并在config/database.php中正确设置REDIS_HOST、PORT、PASSWORD;推荐显式调用Cache::store('redis')操作,TTL单位为秒;连接问题可通过redis-cli直接验证。

Laravel 默认就支持 Redis 缓存,但必须确认驱动已启用、连接配置正确、Redis 服务可达——否则 Cache::get() 会静默返回 null,而不是报错。
确认 Laravel 已启用 redis 驱动并配置了连接
不改 config/cache.php 里的 'default' => 'redis',Laravel 就不会用 Redis;光配了 default 还不够,还得检查 config/database.php 中的 redis 配置块是否指向真实可用的实例。
-
REDIS_HOST、REDIS_PORT、REDIS_PASSWORD(如有)需与你的 Redis 服务一致,本地 Docker 常见为redis(容器名)或127.0.0.1 - 若用 Redis 6+ 且启用了 ACL,
REDIS_PASSWORD实际是 ACL 用户密码,不是旧版的requirepass - 运行
php artisan tinker --execute="Cache::store('redis')->put('test', 'ok', 10); var_dump(Cache::store('redis')->get('test'));"可快速验证连通性与写入能力
使用 Cache facade 存取数据时要注意 store 和 ttl 的显式控制
Cache::get() 默认走 default store,但如果你在 config/cache.php 里把 default 设为 file,那 Redis 就根本不会被调用。真正用 Redis 必须明确指定 store 或改 default。
- 推荐显式调用
Cache::store('redis')->get('key'),避免依赖全局 default 配置 -
ttl参数单位是「秒」,不是分钟——Cache::put('x', 'y', 5)表示 5 秒后过期 - 若值是数组或对象,Laravel 会自动序列化;但 Redis 本身不校验类型,
get()返回的永远是 PHP 原生类型,无需手动unserialize()
遇到 “Connection refused” 或 “Failed to AUTH” 错误怎么定位
这类错误通常不是 Laravel 代码问题,而是环境层未打通。Laravel 抛出的异常信息很直接,关键看 message 字段里带的底层提示。
-
Connection refused:Redis 进程没起来,或REDIS_HOST指向了不可达地址(如 Laravel 在 Docker 容器内却填了127.0.0.1) -
Failed to AUTH:密码错误,或 Redis 配置里requirepass和ACL混用冲突(Redis 6+ 推荐只用 ACL) - 执行
redis-cli -h $REDIS_HOST -p $REDIS_PORT -a "$REDIS_PASSWORD" ping
能绕过 Laravel 直接验证连接和认证
Redis 缓存失效逻辑完全由 TTL 和键删除行为决定,Laravel 不做额外干预;但要注意,Cache::forget() 是原子删除,而直接用 Redis::del() 删除键会导致 Laravel 缓存事件(如 CacheHit)不触发——如果项目里监听了这些事件,就得统一用 Cache facade。











