需实测验证:先用config('cache.default')确认驱动为redis,再用redis-cli ping测试连通性,最后通过scan和get检查redis中带laravel_database:前缀的实际键值。

要确认 Laravel 当前用的是哪个缓存驱动、Redis 里到底存了哪些键、值是否正确,不能只看 .env 或 config 文件——得靠实测验证。关键分两步:查驱动归属、查 Redis 实际数据。
一、确认当前生效的缓存驱动是 Redis
很多人改了 REDIS_HOST 就以为缓存已走 Redis,其实 Laravel 默认是 file 驱动,CACHE_DRIVER 必须显式设为 redis 才生效:
- 检查
.env是否有这行:CACHE_DRIVER=redis(不能注释、不能留空) - 运行
php artisan tinker,执行:config('cache.default')→ 应返回"redis"config('cache.stores.redis.connection')→ 应返回"default"(说明用了 config/database.php 中的 redis 连接) - 再执行
Cache::store('redis')->get('test_dummy'),如果报错“Connection refused”或“Class 'Predis\Client' not found”,说明扩展没装或连接不通
二、验证 Redis 连接与认证是否正常
绕过 Laravel 直连 Redis,快速排除环境问题:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 终端执行:
redis-cli -h $REDIS_HOST -p $REDIS_PORT -a "$REDIS_PASSWORD" ping(把变量替换成真实值,如-h 127.0.0.1 -p 6379;密码为 null 可省略-a) - 返回
PONG表示服务可达、认证通过 - 若失败,检查 Redis 服务是否运行、防火墙/SELinux 是否拦截、密码是否含特殊字符需加引号
三、查看 Redis 中实际存储的缓存键和值
Laravel 的缓存键默认带前缀(如 laravel_database:),直接查 KEYS * 可能被阻塞,推荐安全方式:
- 进入 redis-cli 后执行:
SCAN 0 MATCH *user_123*(替换为你想查的关键词),比 KEYS 更友好 - 查到 key 后,用
GET "laravel_database:user_123"看原始值(Laravel 存的是序列化 PHP 数据,可能含a:2:{s:4:"name";s:3:"Tom";...}) - 更直观的方式:在代码中临时加一句:
dd(Cache::get('user_123'));—— 如果返回预期数组,说明读取成功且反序列化无误 - 注意:用
Cache::put()写入的键,底层实际写入的是laravel_database:{key},不是裸 key
四、区分缓存与会话,避免混淆
Redis 常同时承担 cache 和 session,但它们是两个独立配置项:
- 仅设
CACHE_DRIVER=redis不代表 session 也走 Redis;session 走 Redis 需额外设SESSION_DRIVER=redis - session 键通常以
laravel_session:开头,和缓存键前缀不同,可据此区分 - 若发现
redis-cli里有很多laravel_session:xxx却找不到你写的缓存键,大概率是CACHE_DRIVER没生效,还在用 file 驱动










