Laravel怎样使用Redis作为缓存

来源:AI社区作者:北京网站建设头衔:草根站长
导读:本期聚焦于小伙伴创作的《Laravel怎样使用Redis作为缓存》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Laravel怎样使用Redis作为缓存》有用,将其分享出去将是对创作者最好的鼓励。

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

Laravel怎样使用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清除配置缓存,让新配置生效。

LaravelRedis缓存php修改时间:2026-07-05 20:24:32

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。