最近在优化代码的时候,突然想起来TP5的数据库操作中有个cache,之前也用过,印象里就是在缓存时间内,请求的速度会大大加快,但是修改数据会导致不能及时更新。当初还比较年轻,没有深入去搞清楚,只是不再使用cache了而已,现在刚好有机会,就来稍微学一学吧。
很可惜,不论是官方文档还是网上搜索出来的结果,基本上都只是告诉我们如何去使用它,完全没有说到它的工作原理之类的,无奈,只能去慢慢读源码了。
首先让我感到疑惑的是,这个cache和我们平常用的缓存Cache有什么区别?
如果单单从功能上看的话,好像两者没有任何区别,都能设置key值和有效期,以及打标签也都支持。随后我做了个实验,手动设置key名,然后用cache()助手函数去读取,结果如我所料,读取出来的结果果然是select的结果。
$result = db('my_table')->where($where)->cache('key',10)->select();
var_dump(cache('key')); //结果和$result一样
不过实验归实验,还是得去源码里看看具体是如何实现的。
进入/thinkphp/library/think/db/Query.php中,找到cache方法,可以看到,这里只是设置了属性,真正的使用还不在这里,还得去select、find、value、column里面看。
//源码太长了,就不一一复制了
public function cache($key = true, $expire = null, $tag = null)
{
// 增加快捷调用方式 cache(10) 等同于 cache(true, 10)
if ($key instanceof \DateTime || (is_numeric($key) && is_null($expire))) {
$expire = $key;
$key = true;
}
if (