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的相关操作了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现