Debian系统下ThinkPHP缓存策略
小樊
33
2025-12-28 19:52:15
Debian下ThinkPHP缓存策略与落地实践
一 驱动选型与环境准备
- 驱动与场景
- File:默认驱动,配置简单,适合单机/开发环境;路径通常为 runtime/cache/。
- Redis:高性能、支持持久化与分布式,适合生产环境/高并发;需安装 php-redis 扩展。
- Memcached:纯内存、速度快,适合多服务器共享;需安装 php-memcached 扩展。
- APCu:PHP进程内缓存,适合单机热点数据加速。
- Debian依赖安装示例
- 安装 Redis/Memcached:sudo apt install redis-server / memcached
- 安装 PHP 扩展(按需):sudo apt install php-redis / php-memcached
- 重启 PHP-FPM(按实际版本):sudo systemctl restart php8.2-fpm(示例版本号)
二 配置方式与常用操作
- 配置文件位置与结构(示例为 config/cache.php)
- 单驱动最简配置
- return [‘type’ => ‘redis’, ‘host’ => ‘127.0.0.1’, ‘port’ => 6379, ‘password’ => ‘’, ‘select’ => 0, ‘expire’ => 3600, ‘prefix’ => ‘tp_’];
- stores 多驱动配置(便于切换与复用)
- return [
- ‘default’ => ‘redis’,
- ‘prefix’ => ‘tp6_’,
- ‘expire’ => 3600,
- ‘stores’ => [
- ‘file’ => [‘type’ => ‘File’, ‘path’ => runtime_path().‘cache’, ‘serialize’ => true],
- ‘redis’ => [‘type’ => ‘Redis’, ‘host’ => ‘127.0.0.1’, ‘port’ => 6379, ‘password’ => ‘’, ‘select’ => 0, ‘timeout’ => 3],
- ‘memcached’ => [‘type’ => ‘Memcached’, ‘host’ => ‘127.0.0.1’, ‘port’ => 11211],
]
- ];
- 常用操作
- 设置/获取/删除:cache(‘k’,‘v’,3600); $v=cache(‘k’); cache(‘k’,null);
- 指定驱动:Cache::store(‘redis’)->get(‘k’);
- 标签管理:Cache::tag(‘user’)->set(‘k’,‘v’,3600); Cache::tag(‘user’)->clear();
三 生产可用策略与优化要点
- 键与前缀设计
- 使用统一前缀(如 tp6_)与业务命名空间(如 user:1001:profile),避免键冲突并便于清理。
- 过期与失效
- 高频变动数据设置较短 expire,低频配置类数据可延长;数据变更时主动删除/更新相关缓存,结合标签做批量失效。
- 稳定性与防护
- 防止缓存穿透(对空结果也缓存短时)、击穿(热点 key 加分布式锁,如 Redis SETNX)、雪崩(过期时间加随机抖动)。
- 性能与运维
- 生产优先 Redis,必要时启用集群/读写分离;合理设计键与批量操作(如 mget/mset),并监控命中率与慢查询。
四 开发调试与禁用缓存
- 全局禁用数据缓存
- 将 expire => 0(0 表示不自动过期),或在 config.php 的缓存配置中将默认驱动设为 complex 并为各驱动设置 expire => 0。
- 禁用模板缓存
- 配置:‘template’ => [‘cache’ => false]
- 运行时清理
- 清除全部缓存:\think\Cache::clear(); 仅清模板缓存:\think\Cache::clear(‘template’);
- 禁止浏览器缓存
- 在控制器输出前设置头:header(“Cache-Control: no-cache, no-store, must-revalidate”); header(“Pragma: no-cache”); header(“Expires: 0”);。
五 系统层面优化与维护
- APT 包缓存
- 定期清理:sudo apt-get clean / autoclean;必要时调整缓存大小或过期策略,避免无谓占用磁盘。
- 系统内存与I/O
- 适度调整内核参数以平衡页面缓存回收与写入压力,例如:
- 查看/调整:sysctl vm.vfs_cache_pressure、vm.dirty_ratio、vm.dirty_background_ratio
- 监控与诊断
- 使用 free、df、top/htop、vmstat、iostat 观察内存、磁盘与I/O,结合应用侧命中率指标综合评估缓存效果。