在Linux环境下,ThinkPHP的缓存策略是提升应用性能的关键手段。通过减少数据库查询次数、降低服务器渲染负担、缩短响应时间,能有效应对高并发场景,提升用户体验。Linux系统的多进程、高并发特性与ThinkPHP的缓存机制结合,能最大化发挥系统性能。
ThinkPHP支持多种缓存类型,需根据业务需求选择:
php think optimize:route命令生成路由缓存文件,减少路由注册时的资源消耗(如路由解析、控制器查找)。适用于路由数量多、访问频繁的应用。ThinkPHP支持文件、Redis、Memcached等多种缓存驱动。在Linux环境下,Redis是首选(高性能、支持持久化、分布式),其次是Memcached(适合纯内存缓存)。配置示例如下:
// config/cache.php
return [
'default' => 'redis', // 默认缓存驱动
'stores' => [
'redis' => [
'type' => 'redis',
'host' => '127.0.0.1', // Redis服务器地址
'port' => 6379, // Redis端口
'password' => '', // Redis密码(若有)
'select' => 0, // 默认数据库索引
'expire' => 3600, // 默认过期时间(秒)
'prefix' => 'tp6:', // 缓存前缀(避免键冲突)
'strategy' => 'LRU', // 缓存策略(LRU最近最少使用/lfU最不经常使用)
],
],
];
需提前安装Redis服务及PHP Redis扩展(sudo apt install redis-server php-redis),并启动Redis服务(sudo systemctl start redis-server)。
prefix参数为缓存键添加前缀(如tp6:),避免与其他应用的缓存键冲突。ThinkPHP提供Cache门面类简化缓存操作,常用方法如下:
Cache::set('key', 'value', 3600)(键、值、过期时间);$data = Cache::get('key')(若键不存在返回false);Cache::rm('key');Cache::has('key')。数据缓存示例(控制器中):
use think\facade\Cache;
public function getData()
{
$cacheKey = 'product_123'; // 缓存键(可根据业务生成唯一键)
$data = Cache::get($cacheKey); // 尝试从缓存获取
if (!$data) {
$data = Db::name('products')->find(123); // 缓存未命中,查询数据库
Cache::set($cacheKey, $data, 3600); // 存入缓存,有效期1小时
}
return json($data);
}
页面缓存示例(控制器中):
public function index()
{
return cache('page_index', function() {
// 缓存未命中时执行的逻辑(渲染页面)
return $this->fetch('index');
}, 3600); // 缓存1小时
}
路由缓存命令(终端中):
php think optimize:route
执行后会在runtime目录生成路由缓存文件,提升路由解析速度。
Cache::set('key', null, 60))解决。3600 + rand(0, 300),过期时间在3600-3900秒之间)。Cache::rm('product_123')),避免脏数据。vm.swappiness降低到10以下,减少内存交换)、使用SSD存储(提升IO性能),配合缓存策略提升整体性能。