Ubuntu上ThinkPHP的常见缓存策略及配置
文件缓存是ThinkPHP的默认缓存驱动,适合小型应用或开发环境。它将缓存数据存储在服务器本地文件系统中,配置简单但性能受限于磁盘IO。
配置示例(config/cache.php):
return [
'default' => 'file',
'stores' => [
'file' => [
'type' => 'file',
'path' => runtime_path() . 'cache', // 缓存文件存储路径(通常为runtime/cache目录)
'prefix' => '', // 缓存键前缀(可选)
'expire' => 0, // 缓存有效期(0表示永久缓存)
],
],
];
使用场景:开发调试、小型静态数据缓存(如配置项、菜单数据)。
Redis是基于内存的NoSQL数据库,支持高并发、持久化和丰富的数据结构(如字符串、哈希、列表),适合生产环境的高性能缓存需求。
配置要求:需提前在Ubuntu上安装Redis服务(sudo apt install redis-server)及PHP Redis扩展(sudo apt install php-redis)。
配置示例(config/cache.php):
return [
'default' => 'redis',
'stores' => [
'redis' => [
'type' => 'redis',
'host' => '127.0.0.1', // Redis服务器地址
'port' => 6379, // Redis端口
'password' => '', // Redis密码(无密码则留空)
'select' => 0, // Redis数据库索引(默认0)
'timeout' => 0.01, // 连接超时时间(秒)
'expire' => 3600, // 默认缓存过期时间(秒)
'prefix' => 'tp6:', // 缓存键前缀(避免键冲突)
'strategy' => 'LRU', // 缓存策略(可选:LRU/lfU,淘汰最近最少使用/最不经常使用的数据)
],
],
];
使用场景:高并发应用、需要快速读写的缓存数据(如用户会话、热点商品信息)。
Memcached是分布式内存对象缓存系统,专注于简单的键值存储,适合需要水平扩展的集群环境。
配置要求:需提前在Ubuntu上安装Memcached服务(sudo apt install memcached)及PHP Memcached扩展(sudo apt install php-memcached)。
配置示例(config/cache.php):
return [
'default' => 'memcached',
'stores' => [
'memcached' => [
'type' => 'memcached',
'host' => '127.0.0.1', // Memcached服务器地址
'port' => 11211, // Memcached端口
'persistent_id' => 'thinkphp_memcached', // 持久化连接ID(可选)
'weight' => 100, // 权重(集群环境下使用)
'expire' => 3600, // 默认缓存过期时间(秒)
],
],
];
使用场景:分布式系统、需要共享缓存的集群环境(如多台服务器共享用户会话)。
数据库查询缓存用于缓存SQL查询结果,减少重复查询对数据库的压力。ThinkPHP支持自动缓存查询结果(需开启数据库缓存配置)。
配置示例(config/database.php):
return [
'connections' => [
'mysql' => [
'type' => 'mysql',
'hostname' => '127.0.0.1',
'database' => 'test',
'username' => 'root',
'password' => '',
'charset' => 'utf8mb4',
'debug' => false,
'cache' => [ // 开启查询缓存
'type' => 'file', // 查询缓存驱动(可与全局缓存驱动一致)
'path' => runtime_path() . 'query_cache', // 查询缓存目录
'expire' => 3600, // 查询缓存有效期(秒)
],
],
],
];
使用场景:频繁执行的静态SQL查询(如统计报表、基础数据查询)。
缓存标签用于对缓存数据进行分类管理,方便批量删除同一标签下的缓存(如更新文章时,删除该文章相关的所有缓存)。
使用示例:
use think\facade\Cache;
// 设置带标签的缓存(标签为'study')
Cache::tag('study')->set('article_1', '文章内容1', 3600);
// 获取带标签的缓存
$content = Cache::tag('study')->get('article_1');
// 删除带标签的所有缓存
Cache::tag('study')->clear();
使用场景:需要批量更新的缓存数据(如文章、商品详情页缓存)。
缓存策略用于控制缓存数据的淘汰机制,ThinkPHP支持LRU(最近最少使用)和LFU(最不经常使用)两种策略,可通过配置调整。
配置示例(config/cache.php中的Redis存储配置):
'redis' => [
'type' => 'redis',
'strategy' => 'LRU', // 或 'LFU'(默认为LRU)
// 其他配置...
],
作用:当缓存达到容量上限时,自动淘汰符合策略的数据,保持缓存的高效性。