TP5缓存你用好了吗?至新手开发者应用缓存经验

原创| 开发动态| 一个月前| 阅读 138 次 | 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做分类缓存清除,相对来说逻辑严密一点点。


DMAKE 点击这里下载本文PDF

本频道需要登陆后才能评论,请登录


暂无评论...