概述

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包进行安装:

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集群配置,配合哨兵模式确保高可用性

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部