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的相关操作了。