分享一个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面试题附答案
Jan 07 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
Feb 08 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
php中关于普通表单多文件上传的处理方法
Mar 25 PHP
php笔记之:初探PHPcms模块开发介绍
Apr 26 PHP
php 使用GD库为页面增加水印示例代码
Mar 24 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
Jun 05 PHP
解决CodeIgniter伪静态失效
Jun 09 PHP
WordPress中获取指定分类及其子分类下的文章数目
Dec 31 PHP
php安装dblib扩展,连接mssql的具体步骤
Mar 02 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
PHP中引用类型和值类型功能与用法示例
Feb 26 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
apache+php+mysql安装配置方法小结
2010/08/01 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
Highcharts使用简例及异步动态读取数据
2015/12/30 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
Jquery中attr与prop的区别详解
2017/05/27 jQuery
vue页面切换过渡transition效果
2018/10/08 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
python Django框架实现自定义表单提交
2016/03/25 Python
python如何查看系统网络流量的信息
2016/09/12 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
详解python编译器和解释器的区别
2019/06/24 Python
Python类的动态绑定实现原理
2020/03/21 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
如何利用XMLHTTP检测URL及探测服务器信息
2013/11/10 面试题
银行求职信范文
2014/05/26 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
元旦标语大全
2014/10/09 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
公积金具结保证书
2015/05/11 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
详解非极大值抑制算法之Python实现
2021/06/28 Python