在Laravel项目中,Redis凭借高性能的内存存储特性,成为主流的缓存驱动选择,合理配置后可以有效减少重复查询,提升应用整体响应速度。

环境准备
在配置之前,需要确保服务器已经安装Redis服务,并且Laravel项目已经安装了Redis扩展包。如果项目还未安装Redis相关依赖,可以通过Composer执行以下命令安装:
composer require predis/predis
安装完成后,需要确认Redis服务处于运行状态,默认端口为6379,若修改过Redis配置需记录对应的主机地址、端口、密码等信息。
修改缓存配置文件
Laravel的缓存配置文件位于config/cache.php,首先需要在配置文件中添加Redis缓存驱动的相关配置,或者直接修改默认的缓存驱动设置。
打开config/cache.php,找到stores数组,检查是否已经存在redis配置项,如果没有可以手动添加:
'stores' => [
// 其他已有配置项
'redis' => [
'driver' => 'redis',
'connection' => 'cache', // 对应config/database.php中redis的cache连接
],
],
接下来需要配置Redis的连接信息,打开config/database.php,找到redis配置数组,确保存在cache连接配置:
'redis' => [
'client' => 'predis',
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DB', 0),
'prefix' => env('REDIS_PREFIX'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_CACHE_DB', 1),
'prefix' => env('REDIS_PREFIX'),
],
],
然后修改.env文件,设置默认的缓存驱动为Redis:
CACHE_DRIVER=redis REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 REDIS_CACHE_DB=1
验证配置是否生效
配置完成后,可以通过编写简单的测试代码验证Redis缓存驱动是否正常工作。可以在路由文件或者控制器中添加以下测试逻辑:
// 存储缓存
Cache::put('test_key', 'hello redis cache', 60); // 缓存60秒
// 获取缓存
$value = Cache::get('test_key');
// 输出结果
dd($value); // 正常情况会输出hello redis cache
如果输出结果符合预期,说明Redis已经成功作为Laravel的缓存驱动运行。也可以登录Redis客户端,执行keys *命令查看是否存在对应的缓存键,进一步确认配置生效。
常见问题及解决方法
- 如果提示Redis连接失败,首先检查Redis服务是否启动,然后核对
.env中的Redis主机、端口、密码是否正确。 - 如果缓存存储后无法获取,检查
config/database.php中Redis的prefix配置是否和缓存配置中的前缀一致,避免键名不匹配。 - 若使用Predis扩展包仍然报错,可以尝试切换为PhpRedis扩展,修改
config/database.php中的client值为phpredis,并安装对应的PHP扩展。
性能优化建议
为了让Redis缓存发挥更好的性能,可以适当调整以下配置:
- 为缓存单独分配Redis数据库,避免和其他业务数据混合存储,即修改
REDIS_CACHE_DB为独立的数据库编号。 - 合理设置缓存前缀,避免不同项目的缓存键发生冲突。
- 根据业务需求设置合适的缓存过期时间,避免无效缓存占用过多内存。