概述
ThinkPHP5采用Cache类提供缓存功能支持,采用驱动方式,在使用缓存之前需要进行初始化操作。支持的缓存类型包括file、memcache、wincache、sqlite、redis和xcache等,默认情况下是file类型,配置redis缓存可以单一配置redis也可以同时使用多个缓存类型。
一、仅配置Redis缓存
在配置文件(config.php)中修改缓存设置如下:
'cache' => [
// 驱动方式
'type' => 'redis',
// 服务器地址
'host' => '192.168.1.100',
// 端口
'port' => 6379,
// 密码(如果没有密码则留空)
'password' => '',
// 缓存前缀
'prefix' => 'tp5_',
// 缓存有效期(0表示永久缓存)
'expire' => 0,
],
这样配置后,就可以直接使用Cache类操作Redis:
use think\Cache;
// 设置缓存
Cache::set('name', 'value', 3600);
// 获取缓存
Cache::get('name');
// 删除缓存
Cache::rm('name');
二、配置多个缓存类型(复合缓存)
当需要同时使用多种缓存类型时,可以使用复合缓存类型,配置方式如下:
'cache' => [
// 使用复合缓存类型
'type' => 'complex',
// 默认使用的缓存
'default' => [
// 驱动方式
'type' => 'File',
// 缓存保存目录
'path' => CACHE_PATH,
],
// 文件缓存
'file' => [
// 驱动方式
'type' => 'file',
// 设置不同的缓存保存目录
'path' => RUNTIME_PATH . 'file/',
],
// redis缓存
'redis' => [
// 驱动方式
'type' => 'redis',
// 服务器地址
'host' => '192.168.1.100',
// 端口
'port' => 6379,
// 密码(如果没有密码则留空)
'password' => '',
// 缓存前缀
'prefix' => 'tp5_',
// 缓存有效期(0表示永久缓存)
'expire' => 0,
],
],
使用复合缓存类型时,需要根据需要使用store方法切换缓存。
三、使用方法
1. 使用默认缓存
当使用以下方式时,使用的是default缓存标识的缓存配置:
// 写入缓存
Cache::set('name', 'value');
// 读取缓存
Cache::get('name');
// 判断缓存是否存在
Cache::has('name');
// 删除缓存
Cache::rm('name');
2. 切换到其他缓存类型
如果需要切换到其它缓存标识操作,可以使用store方法:
// 切换到file缓存操作
Cache::store('file')->set('name', 'value1');
Cache::store('file')->get('name');
// 切换到redis缓存操作
Cache::store('redis')->set('name', 'value2');
Cache::store('redis')->get('name');
3. 实际应用示例
比如,查询一篇文章时首先从redis中查询,若未查到信息则从数据库中查询出结果,并存储到redis中:
// 使用Redis缓存数据库结果
$db = Db::name('article');
$article = Cache::store('redis')->get('article_list');
if (!$article) {
$article = $db->where('status', 1)->select();
Cache::store('redis')->set('article_list', $article, 3600);
}
四、在控制器中操作Redis
方法一:使用Cache类
<?php
namespace app\index\controller;
use think\Cache;
use think\Controller;
class RedisDemo extends Controller
{
public function index()
{
// 设置缓存
Cache::store('redis')->set('test_key', 'test_value', 3600);
// 获取缓存
$value = Cache::store('redis')->get('test_key');
return $value;
}
}
方法二:直接实例化Redis驱动
<?php
namespace app\index\controller;
use think\Controller;
use think\cache\driver\Redis;
class RedisDemo extends Controller
{
private $redis;
public function __construct()
{
$this->redis = new Redis([
'host' => '127.0.0.1',
'port' => 6379,
'password' => '', // 如果有密码请填写
'select' => 0,
'timeout' => 0,
'expire' => 0,
'prefix' => '',
]);
}
public function index()
{
// 设置缓存
$this->redis->set('name', 'value');
// 获取缓存
$value = $this->redis->get('name');
return $value;
}
}
五、带密码的Redis连接配置
如果Redis设置了连接密码,在配置中添加password参数即可:
'redis' => [
'type' => 'redis',
'host' => '192.168.1.100',
'port' => 6379,
'password' => 'your_password', // Redis连接密码
'prefix' => 'tp5_',
'expire' => 0,
],
提示:在Linux服务器部署时,建议Redis设置密码以提高安全性,同时在配置文件中保存密码信息。
六、扩展Redis类方法
ThinkPHP5自带的Redis类方法只有基本的get、set、rm等方法。如果需要使用Redis的其他数据类型操作(如List、Hash、Set等),可以扩展Redis类。
例如,以下方法可以有用于消息队列处理:
// Redis List 操作
// 从左侧插入
Cache::store('redis')->lPush('myQueue', 'value'); // 需在TP5后扩展
// Hash 操作
// 在thinkphp5中默认不封装下列操作,可以自行扩展
// Set 操作
// 同样需要自行扩展
七、常见问题解决
1. 报错:not support: redis
这个问题通常是因为:
- PHP的redis扩展未安装
- Redis扩展版本不兼容
解决方法:确认已安装php_redis扩展,并在phpinfo()中能看到redis信息。
2. Windows下安装Redis
Windows下可以通过MSOpenTech的Redis for Windows包进行安装:
- 下载地址:GitHub - MSOpenTech/redis
- 选择对应版本(32位/64位)
- 安装后即可通过redis-server启动服务
3. 性能对比
Redis缓存相比文件缓存的优势:
- 读取速度更快(内存操作 vs 磁盘I/O)
- 支持更多数据结构(String、Hash、List、Set、Sorted Set)
- 适合分布式部署
- 支持数据持久化
八、相关配置项参考
| 配置项 | 说明 | 默认值 |
|---|---|---|
| type | 缓存驱动类型 | File |
| host | Redis服务器地址 | 127.0.0.1 |
| port | Redis端口 | 6379 |
| password | Redis密码 | 空 |
| prefix | 缓存前缀 | 空 |
| expire | 缓存有效期(秒) | 0(永久) |
| select | 数据库编号 | 0 |
| timeout | 连接超时时间 | 0 |
九、总结
ThinkPHP5中的Redis缓存配置非常灵活,既支持单一Redis缓存模式,也支持复合缓存类型。开发者可以根据项目需求选择合适的配置方式。在实际使用中,推荐将Redis作为主要缓存,文件缓存作为备用,以获得更好的性能表现。
- 小型项目:推荐直接使用单一Redis缓存配置,简单高效
- 中大型项目:推荐使用复合缓存类型,Redis为主缓存,文件缓存为备用
- 高可用场景:推荐使用Redis集群配置,配合哨兵模式确保高可用性

发表评论 取消回复