分享一个Laravel好用的Cache宏


Posted in PHP onMarch 02, 2015

Laravel提供的缓存工具很好用,手册里介绍了一些基本的用法,比如get,put,forget,forever等,一开始我是像下面这样使用的:

if (!$article = Cache::get('article_1')) {

    $article = Article::find(1);

    Cache::forever('article_1',$article);

}

这是最基本的用法,自动判断缓存是否存在,不存在则从数据库中取并写入缓存。

后来发现模型也自带remember 和 rememberForever方法,例如可以这样:

$article = Article::rememberForever('article_1')->where('id','=',1);

这个有局限性,在复杂查询时并不能完全缓存数据,比如使用了with()预加载关联数据时就无法缓存关联数据。

然后发现Cache也可以像Response那样自定义宏方法,遂作如下尝试:

//注册缓存存取宏

Cache::macro('want',function($key,$minutes=0,$callback){

    if (!$data = Cache::get($key)) {

        $data = call_user_func($callback);

        if ($minutes == 0) {

            Cache::forever($key,$data);

        } else {

            Cache::put($key,$data,$minutes);

        }

    }

    return $data;

});

这个方法可以放在bootstrap/start.php里,也可以放在filter中的App::before()中,随自己项目方便吧,看下如何使用的:

$id = Input::get('id');

$article = Cache::want('article_'.$id,0,function() use ($id){

    return Article::with('tags')->findOrFail($id,['id','cid','title','content_html as content','created_at','updated_at']);

});

个人挺喜欢这种写法的。希望大家能够喜欢本文内容。

PHP 相关文章推荐
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
关于file_get_contents返回为空或函数不可用的解决方案
Jun 24 PHP
php中instanceof 与 is_a()区别分析
Mar 03 PHP
php文件读取方法实例分析
Jun 20 PHP
PHP经典面试题之设计模式(经常遇到)
Oct 15 PHP
Zend Framework教程之Zend_Db_Table用法详解
Mar 21 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
Oct 13 PHP
Smarty3配置及入门语法
Feb 22 PHP
PHP filesize函数用法浅析
Feb 15 PHP
tp5 sum某个字段相加得到总数的例子
Oct 18 PHP
PHP基于array_unique实现二维数组去重
Jul 14 PHP
浅谈php常用的7大框架的优缺点
Jul 20 PHP
php解析http获取的json字符串变量总是空白null
Mar 02 #PHP
laravel 5 实现模板主题功能(续)
Mar 02 #PHP
laravel 5 实现模板主题功能
Mar 02 #PHP
Opcache导致php-fpm崩溃nginx返回502
Mar 02 #PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
Mar 02 #PHP
Laravel5中contracts详解
Mar 02 #PHP
php打印一个边长为N的实心和空心菱型的方法
Mar 02 #PHP
You might like
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
jQuery在header中设置请求信息的方法
2017/03/06 Javascript
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
Angular(5.2->6.1)升级小结
2018/12/27 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
Python基于DES算法加密解密实例
2015/06/03 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
农贸市场管理制度
2014/01/31 职场文书
社区母亲节活动记录
2014/03/06 职场文书
中国入世承诺
2014/04/01 职场文书
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
合作与交流自我评价
2015/03/09 职场文书
导师工作推荐信
2015/03/27 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
Python开发工具Pycharm的安装以及使用步骤总结
2021/06/24 Python
68行Python代码实现带难度升级的贪吃蛇
2022/01/18 Python
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript
Go语言编译原理之变量捕获
2022/08/05 Golang