分享一个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
用libtemplate实现静态网页生成
Oct 09 PHP
php 设计模式之 工厂模式
Dec 19 PHP
PHP XML数据解析代码
May 26 PHP
Zend Framework页面缓存实例
Jun 25 PHP
php获取指定日期之间的各个周和月的起止时间
Nov 24 PHP
php实现每天自动变换随机问候语的方法
May 12 PHP
PHP统计当前在线用户数实例讲解
Oct 21 PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 PHP
php之header的不同用法总结(实例讲解)
Nov 28 PHP
PHP实现的微信公众号扫码模拟登录功能示例
May 30 PHP
phpmyadmin在宝塔面板里进不去的解决方案
Jul 06 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
利用PHP制作简单的内容采集器的代码
2007/11/28 PHP
php 数学运算验证码实现代码
2009/10/11 PHP
探讨如何把session存入数据库
2013/06/07 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
2014/10/17 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
完善的jquery处理机制
2016/02/21 Javascript
原生javascript实现图片放大镜效果
2017/01/18 Javascript
DOM事件探秘篇
2017/02/15 Javascript
Vue中父组件向子组件通信的方法
2017/07/11 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
vue按需加载实例详解
2019/09/06 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
2020/06/02 jQuery
JavaScript如何使用插值实现图像渐变
2020/06/28 Javascript
python: line=f.readlines()消除line中\n的方法
2018/03/19 Python
python实现电脑自动关机
2018/06/20 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
浅谈Python3中print函数的换行
2020/08/05 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
金融管理应届生求职信
2014/02/20 职场文书
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
大学英语演讲稿范文
2014/04/24 职场文书
2014年招生工作总结
2014/11/26 职场文书
世界红十字日活动总结
2015/02/10 职场文书
学校节水倡议书
2015/04/29 职场文书