分享一个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个人网站架设连环讲(一)
Oct 09 PHP
如何在PHP程序中防止盗链
Apr 09 PHP
PHP 学习路线与时间表
Feb 21 PHP
php下清空字符串中的HTML标签的代码
Sep 06 PHP
PHP中strtotime函数使用方法分享
Jan 10 PHP
php中导出数据到excel时数字变为科学计数的解决方法
Feb 03 PHP
解析关于wamp启动是80端口被占用的问题
Jun 21 PHP
PHP大转盘中奖概率算法实例
Oct 21 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
PHP创建PowerPoint2007文档的方法
Dec 10 PHP
PHP count_chars()函数讲解
Feb 14 PHP
PHP中__set()实例用法和基础讲解
Jul 23 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
CI框架中cookie的操作方法分析
2014/12/12 PHP
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
重写document.write实现无阻塞加载js广告(补充)
2014/12/12 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
2016/08/24 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
bootstrap modal+gridview实现弹出框效果
2017/08/15 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
[53:38]OG vs LGD 2018国际邀请赛淘汰赛BO3 第三场 8.26
2018/08/30 DOTA
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
pycharm的console输入实现换行的方法
2019/01/16 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
python使用正则表达式(Regular Expression)方法超详细
2019/12/30 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
欧洲最大的化妆品连锁公司:Douglas道格拉斯
2017/05/06 全球购物
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
ORACLE第二个十问
2013/12/14 面试题
大学生实习证明范本
2014/01/15 职场文书
小学课外阅读总结
2014/07/09 职场文书
采购员工作总结范文
2015/08/12 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS