分享一个 Trait 来易用 Laravel 的缓存
求星求关注 https://github.com/deathkel/easy-cache
安装
composer require deathkel/easy-cache
使用
- 这个包会自动缓存使用了该 'trait' 的 'class' 的protect方法
- 默认缓存时间是60分钟,你可以添加一个
static变量$expire到你的 'fucntion' 中来单独设置该 'function' 的缓存时间
public class test(){
use EasyCacheTrait;
public function DontWantToBeCache(){ // public function 不会被缓存
//.....
}
protected function WantToBeCache(){ // protected function 会被自动缓存
static $expire = 60; //默认缓存时间
}
}
在Laravel的bug模式下
- 你可以添加 'skipCache = 1' 你的http查询参数来跳过缓存直接执行方法
- 你还可以添加 'forgetCache = 1' 来忘记你的缓存并重新缓存
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer
于 8年前 加精
关于 LearnKu
是 protected 吧?
通过方法的可见性来区分是否缓存,这是如何考虑的?
@MrJing 谢谢提醒,手误了。‘protected’ 方法在调用前会先调用魔术方法 ‘call’ ,我的想法是在 ‘call’ 中获取所调用方法的 参数数组,然后将其 ‘hash’ 值 与方法名拼接 来作为缓存的名称,使得 ‘protected’ 的方法作为一个闭包 来进行缓存。 使得缓存的逻辑与 方法本身分离。 然后再通过反射的方式 获取 方法的 ‘static’ 变量 来为每个方法 指定缓存时间(如果不使用默认缓存时间的话)。 现在想到还可以通过 static 变量 来判断是否需要缓存这个方法,后续加上吧
这个实现挺有意思的
类似这个吗?不过号下那个灵活
https://github.com/andersao/l5-repository#...
@linzi007 发快了,不过好像你的更灵活。
@linzi007 reposity 的一般做法就是把 'ORM' 和 'Cache' 整合到同一个类中,类似装饰者模式的方式去缓存,我之前也用过,同感 我也觉得我这个更灵活点,轻量。 之前用过一个 https://github.com/rinvex/repository 这个,感觉很鸡肋,它的reposity类又把ORM的查询方法 自己实现了一遍 ,然后通过query查询参数去做缓存,很不灵活