ThinkPHP5.0源码学习之缓存Cache(二)

一、使用Cache类
TP5.0框架默认使用的是File文件缓存驱动,可以修改全局配置文件convention.php中的type,将其改为Redis,这样使用的就是Redis缓存驱动了。
但是Cache类中的方法很少,只有set、get、inc、dec等方法,如果没有复杂的需求,可以使用Cache类自带的方法。
不太明白的是,Cache类的方法就那么几个,如果使用TP5.0的Cache类,好像没必要修改type?不管是File也好还是Redis也好,直接使用即可?
 
二、使用Redis类
TP5.0同样自带redis类方法,然而只有简单的读取缓存、写入缓存的基本方法,并且在使用前需要安装Redis及phpredis扩展。
1、原生用法
一开始用法如下,打断点调试时,发现并没有走到Redis.php里,用了一些redis命令尝试,可以确定并没有使用TP5.0框架自带的Redis类。
public function redis() {
    // 原生用法
    $redis = new \Redis();  // Redis前需加\
    $redis->connect('127.0.0.1', 6379);  // 必须有connect
 
    $redis->set('test', 'abc');
    $redis->append('test', ' def');
    $res = $redis->get('test');
    print_r($res);  // abc def
}

 

2、使用Redis类

如果想使用TP5.0自带的Redis类,需要use think\cache\driver\Redis,

use think\cache\driver\Redis;
 
public function redis() {
    $redis = new Redis();
   
    $redis->set('test', ‘hello world');
    $res = $redis->get('test');
    print_r($res);  // hello world
}

使用TP5.0自带的Redis类,实例化前Redis前不用加“\”,和原生用法不一样。

 
先来看Redis类的构造方法:
可以看到这个Redis类继承了Driver类,也就是\thinkphp\library\think\cache下的Driver.php,其中里面有个handler()方法:
这里的$this->handler其实就是Redis类构造方法中实例化Redis的对象。
 
Redis本身支持五种数据类型,string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)。而TP5.0自带redis类方法,只有简单的读取缓存、写入缓存等基本方法,没有list的相关操作方法,我们可以自己扩展,比如在Redis.php自定义两个方法:
// 在list左边添加元素
public function LPush($key, $value)
{
    return $this->handler->lPush($key, $value);
}
 
// 返回list指定区间内的元素
public function LRange($key, $start = 0, $end = -1) {
    return $this->handler->lRange($key, $start, $end);
}

在控制器中调用,就可以实现list的相关操作了。

posted @ 2018-04-11 16:27  鹿呦呦  阅读(1023)  评论(0编辑  收藏  举报