分享一个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控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
PHP操作xml代码
Jun 17 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Dec 29 PHP
php中在PDO中使用事务(Transaction)
May 14 PHP
PHP中source #N问题的解决方法
Jan 27 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
May 08 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
PHP中header函数的用法及其注意事项详解
Jun 13 PHP
PHP转换文本框内容为HTML格式的方法
Jul 20 PHP
php封装的page分页类完整实例
Oct 18 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 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
PHP4实际应用经验篇(8)
2006/10/09 PHP
PHP和XSS跨站攻击的防范
2007/04/17 PHP
PHP超级全局变量数组小结
2012/10/04 PHP
JQuery1.6 使用方法三
2011/11/23 Javascript
javascript获得服务器端控件的ID的实现代码
2011/12/28 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
详解jQuery插件开发中的extend方法
2013/11/19 Javascript
js中生成map对象的方法
2014/01/09 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
js css+html实现简单的日历
2016/07/14 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
js实现div色块拖动录制
2020/01/16 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
如何基于Python按行合并两个txt
2020/11/03 Python
Martinelli官方商店:西班牙皮鞋和高跟鞋品牌
2019/07/30 全球购物
小学教研工作制度
2014/01/15 职场文书
给校长的一封检讨书
2014/09/20 职场文书
乡镇三严三实学习心得体会
2014/10/13 职场文书
党的群众路线教育实践活动领导班子整改方案
2014/10/25 职场文书
2015年公务员个人工作总结
2015/04/24 职场文书
雷锋电影观后感
2015/06/10 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers