原创| 开发动态| 2020-01-09| 阅读 141 次 | 5赞同 0反对
概述:在板砖才开始上手TP5的时候,这个小东西完全经验着我了,各种助手方法太方便了,cache方法也不例外,但是随着开发经验的丰富才发现,很多官方的原生方法并不是我想象的这样玩儿的。
在开始深入Tp5缓存用法之前,我先来回顾一下常见的简便用法:
Cache::set('name',$value,3600); //缓存的原装用法
// 缓存的助手方法用法
$options = [
'type' => 'File',
'expire' => 0,
'path' => APP_PATH . 'runtime/cache/',
];
cache($options);
cache('name', $value, 3600);
var_dump(cache('name'));
cache('name', NULL);
cache('test', $value, $options);
// 缓存的进阶用法
Cache::tag('tag')->set('name1','value1');
Cache::set('name1','value1');
Cache::tag('tag',['name1','name2']);
Cache::clear('tag');
在上述3种TP5缓存的用法里,更多新人会使用到前两种,读取都很方便。
但是如果你的缓存量有1G怎么办?
很多同学可能想着不可能吧,我的网站一天流量不过100IP,内容不到十万级别怎么可能有这么多缓存呢,而且还有2小时自动过期的机制呢!
板砖提出这个问题是因为曾经面领着整个系统缓存还真的超过了1G,然而没有特别的缓存清除机制,导致为了临时修正一个缓存错误不得不清除所有缓存,这个对服务器来说好像也不是什么大事儿,但是从严谨的态度来说这个机制很不好。
因此,板砖小小调整了一下缓存助手,助手函数放在common.php中,大家可以围观:
/**
* 为了预防cache出错,做的判断
* @param unknown tag前缀
* @param unknown 名称
* @param string $value 当不写value的时候是获取,写的时候是赋值
* @return mixed|\think\cache\Driver|boolean|NULL
*/
function dcache($tag, $name, $value = '', $outtime = 3600)
{
if (config('cache_status') == 0) {
return null;
}
try {
if ($value == '') {
return cache($name);
}
if ($tag) {
return Cache::tag($tag)->set($name, $value, $outtime);
}
return cache($name, $value, $outtime);
} catch (Exception $e) {
return null;
}
}
// 清除分类缓存方法
Cache::clear(CACHE_ARTICLE);
本方法中可以根据配置确认是否缓存,在缓存中强制设置tag,在清除缓存的时候就可以根据tag做分类缓存清除,相对来说逻辑严密一点点。
本频道需要登陆后才能评论,请登录