Laravel在Linux上的缓存机制解析
导读:Laravel 在 Linux 上的缓存机制解析 一 核心架构与配置路径 Laravel 提供统一的缓存门面与 API,底层可对接多种驱动(如 file、database、redis、memcached、apc/apcu、array),配...
Laravel 在 Linux 上的缓存机制解析
一 核心架构与配置路径
- Laravel 提供统一的缓存门面与 API,底层可对接多种驱动(如 file、database、redis、memcached、apc/apcu、array),配置文件位于 config/cache.php,默认驱动通过 .env 的 CACHE_DRIVER 指定。文件缓存默认写入 storage/framework/cache/data。在生产环境通常优先选择 Redis 或 Memcached 等内存级后端以获得更高吞吐与更低延迟。
二 驱动选型与 Linux 安装要点
- 常见驱动与要点概览
| 驱动 | 典型场景 | Linux 依赖 | 关键配置 |
|---|---|---|---|
| file | 开发/小型项目 | 无 | 确保 storage/framework/cache/data 可写 |
| database | 无外部缓存服务时的折中 | 数据库(如 MySQL/PG) | 生成迁移:php artisan cache:table,再 migrate |
| redis | 高并发、分布式、需要持久化/发布订阅 | redis-server、PHP 扩展(phpredis 或 predis) | CACHE_DRIVER=redis;配置 REDIS_HOST/PORT/PASSWORD/DB |
| memcached | 纯内存键值、多节点 | memcached、php-memcached | CACHE_DRIVER=memcached;配置 MEMCACHED_HOST/PORT |
| apc/apcu | 单机 PHP 进程内缓存 | php-apcu | CACHE_DRIVER=apcu |
- 在 Debian/Ubuntu 上安装 Redis 与 PHP 扩展示例
- 安装服务:sudo apt update & & sudo apt install redis-server
- 安装 PHP 扩展(二选一)
- phpredis:pecl install redis & & echo “extension=redis.so” > > /etc/php/*/cli/php.ini(按实际 CLI/FPM 路径调整)
- predis:composer require predis/predis
- 在 CentOS/RHEL 上安装 Memcached 与 PHP 扩展示例
- 安装服务:sudo yum install memcached
- 安装 PHP 扩展:sudo yum install php-pecl-memcached
- 以上驱动与安装要点适用于常见 Linux 发行版,具体包名与路径以发行版为准。
三 配置步骤与环境变量
- 设置默认驱动与应用前缀
- .env:CACHE_DRIVER=redis
- config/cache.php:‘default’ => env(‘CACHE_DRIVER’, ‘redis’), ‘prefix’ => env(‘CACHE_PREFIX’, ‘myapp_’),
- 配置 Redis 连接(示例)
- .env:
- REDIS_HOST=127.0.0.1
- REDIS_PASSWORD=null
- REDIS_PORT=6379
- REDIS_DB=0
- config/database.php(Redis 连接,供缓存与队列等共用):
- ‘redis’ => [ ‘client’ => env(‘REDIS_CLIENT’, ‘phpredis’), ‘default’ => [ ‘host’ => env(‘REDIS_HOST’, ‘127.0.0.1’), ‘password’ => env(‘REDIS_PASSWORD’, null), ‘port’ => env(‘REDIS_PORT’, 6379), ‘database’ => env(‘REDIS_DB’, 0), ], ],
- .env:
- 配置 Memcached(示例)
- .env:MEMCACHED_HOST=127.0.0.1;MEMCACHED_PORT=11211
- config/cache.php(stores.memcached 段):设置 servers 数组与可选 SASL 认证
- 多存储切换与验证
- 切换驱动后建议执行:php artisan config:cache
- 验证 Redis:Cache::store(‘redis’)-> put(‘test_key’,‘ok’,10); dd(Cache::get(‘test_key’));
- 生产部署中,缓存前缀能有效避免多应用键冲突。
四 常用 API 与缓存标签
- 基础用法(统一门面 Cache)
- 获取/设置:Cache::get(‘k’, ‘default’);Cache::put(‘k’,‘v’, $seconds)
- 条件写入:Cache::add(‘k’,‘v’, $seconds)
- 获取或写入:Cache::remember(‘k’, $minutes, fn()=> DB::table(‘users’)-> get())
- 永久与删除:Cache::forever(‘k’,‘v’);Cache::forget(‘k’);Cache::flush()
- 原子计数:Cache::increment/decrement(‘k’, $step)
- 全局辅助函数:cache(‘k’) / cache([‘k’=> ‘v’], $seconds)
- 缓存标签(便于批量失效)
- 写入:Cache::tags([‘posts’,‘hot’])-> put(‘recent’,$data,60)
- 读取:Cache::tags([‘posts’,‘hot’])-> get(‘recent’)
- 失效:Cache::tags(‘posts’)-> flush()(仅清 posts 标签)
- 注意:标签不支持 file 与 database 驱动;多标签与永久缓存场景下 Memcached 表现更佳。
五 运维与性能建议
- 运行与连通性
- 启动/自启:sudo systemctl start redis-server & & sudo systemctl enable redis-server
- 连通测试:redis-cli ping(返回 PONG 表示可用)
- 监控与排障
- 性能与状态:redis-cli info(查看命中率、内存、客户端等)
- 线上键检查:redis-cli keys ‘*’(仅用于排查,生产慎用)
- 键空间与隔离
- 使用有意义的前缀(如应用名/环境名),避免多应用共享同一 Redis 实例时键冲突
- 必要时为缓存、会话、队列分配不同 Redis DB 或连接,减少相互影响
- 配置优化
- 合理设置 TTL 与缓存粒度;热点数据使用更长的 TTL 与更高优先级
- 文件缓存需确保目录可写且 I/O 充足;数据库缓存建议仅作过渡方案
- 安全
- 为 Redis 设置密码(requirepass)、绑定内网、按需启用 TLS;Memcached 如需 SASL 认证请在配置中开启
- 清理与发布
- 配置或路由变更后执行:php artisan config:clear / route:clear;切换驱动后执行:php artisan config:cache
- 清理缓存数据:php artisan cache:clear(注意 flush 会清空所选存储的全部键)
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Laravel在Linux上的缓存机制解析
本文地址: https://pptw.com/jishu/761797.html
