在Laravel项目中使用Redis作为缓存驱动,是提升系统性能的常见方案,Redis的高读写速度能大幅降低数据库查询压力,让接口响应更迅速。下面将从环境准备到实际使用逐步讲解完整流程。

环境准备
首先确保服务器已经安装Redis服务,并且Laravel项目可以正常连接Redis。如果项目还没有安装Redis相关的PHP扩展,需要先安装predis/predis包,这是Laravel官方推荐的Redis客户端。
在项目根目录执行以下命令安装依赖:
composer require predis/predis
配置Redis连接
Laravel的缓存配置和Redis连接配置是分开的,需要先配置Redis的连接信息,再指定缓存驱动为Redis。
Redis连接配置
打开项目根目录下的config/database.php文件,找到redis配置项,默认配置如下,可根据实际Redis服务信息修改:
<?php
return [
// 其他数据库配置
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
],
'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),
'read_timeout' => 60,
],
'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),
'read_timeout' => 60,
],
],
];
建议将Redis的连接信息配置到.env文件中,方便不同环境切换,.env文件添加如下配置:
REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 REDIS_CACHE_DB=1
缓存驱动配置
打开config/cache.php文件,找到default配置项,将默认的缓存驱动改为redis,同时确认stores数组中已经有redis的配置:
<?php
return [
'default' => env('CACHE_DRIVER', 'redis'),
'stores' => [
// 其他缓存存储配置
'redis' => [
'driver' => 'redis',
'connection' => 'cache',
],
],
];
同样可以在.env文件中直接修改缓存驱动:
CACHE_DRIVER=redis
Redis缓存基本操作
配置完成后,就可以在Laravel中使用Redis缓存了,Laravel提供了统一的缓存操作门面Cache,无需关心底层驱动差异。
存储缓存数据
使用put方法可以存储缓存,需要指定缓存键、缓存值和过期时间(单位:分钟):
<?php
use IlluminateSupportFacadesCache;
// 存储缓存,键为user_1_info,值为用户数据,过期时间10分钟
Cache::put('user_1_info', ['id' => 1, 'name' => '张三', 'age' => 20], 10);
// 如果缓存不存在则存储,存在则不操作,add方法返回布尔值表示是否存储成功
$result = Cache::add('config_site', ['site_name' => '测试站点'], 60);
// 永久存储缓存,没有过期时间,需要手动删除
Cache::forever('system_version', '1.0.0');
获取缓存数据
使用get方法获取缓存,如果缓存不存在可以返回默认值:
<?php
use IlluminateSupportFacadesCache;
// 获取缓存,不存在返回null
$userInfo = Cache::get('user_1_info');
// 获取缓存,不存在返回自定义默认值
$config = Cache::get('config_site', ['site_name' => '默认站点']);
// 获取并删除缓存
$version = Cache::pull('system_version');
删除缓存数据
缓存数据可以单个删除,也可以批量清空:
<?php
use IlluminateSupportFacadesCache;
// 删除单个缓存
Cache::forget('user_1_info');
// 清空所有缓存(谨慎使用)
Cache::flush();
缓存存在判断
操作前可以先判断缓存是否存在:
<?php
use IlluminateSupportFacadesCache;
if (Cache::has('user_1_info')) {
// 缓存存在时的逻辑
$userInfo = Cache::get('user_1_info');
}
缓存使用最佳实践
为了让Redis缓存发挥最大性能,需要注意以下使用规范:
- 缓存键命名要有统一规范,比如使用模块名_业务名_标识的格式,避免键名冲突
- 不要缓存过大的数据,Redis适合存储小体量的高频访问数据,大对象建议拆分缓存
- 设置合理的过期时间,避免无效缓存占用内存,也不要设置过短导致缓存命中率低
- 数据库更新后及时删除或更新对应的缓存,避免缓存和数据库数据不一致
- 可以使用缓存前缀区分不同项目的缓存,避免多项目共用Redis时键名冲突
性能优化建议
除了基础配置和使用,还可以通过以下方式提升Redis缓存的性能:
- 如果项目并发量高,可以开启Redis持久化的时候选择AOF追加写的方式,平衡性能和数据安全
- 合理设置Redis的最大内存,避免内存溢出导致服务异常,同时配置内存淘汰策略
- 对于高频访问的缓存,可以考虑使用Redis集群或者主从复制,提升可用性和读写能力
- 避免在缓存中执行复杂的操作,尽量只做简单的键值存取,减少Redis的CPU消耗
注意:如果修改了配置文件,需要执行php artisan config:clear清除配置缓存,让新配置生效。