分享一个 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 于 7年前 加精
KEL
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 6

是 protected 吧?
通过方法的可见性来区分是否缓存,这是如何考虑的?

7年前 评论
KEL

@MrJing 谢谢提醒,手误了。‘protected’ 方法在调用前会先调用魔术方法 ‘call’ ,我的想法是在 ‘call’ 中获取所调用方法的 参数数组,然后将其 ‘hash’ 值 与方法名拼接 来作为缓存的名称,使得 ‘protected’ 的方法作为一个闭包 来进行缓存。 使得缓存的逻辑与 方法本身分离。 然后再通过反射的方式 获取 方法的 ‘static’ 变量 来为每个方法 指定缓存时间(如果不使用默认缓存时间的话)。 现在想到还可以通过 static 变量 来判断是否需要缓存这个方法,后续加上吧

7年前 评论

这个实现挺有意思的

7年前 评论

@linzi007 发快了,不过好像你的更灵活。

7年前 评论
KEL

@linzi007 reposity 的一般做法就是把 'ORM' 和 'Cache' 整合到同一个类中,类似装饰者模式的方式去缓存,我之前也用过,同感 我也觉得我这个更灵活点,轻量。 之前用过一个 https://github.com/rinvex/repository 这个,感觉很鸡肋,它的reposity类又把ORM的查询方法 自己实现了一遍 ,然后通过query查询参数去做缓存,很不灵活

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!