分享一个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 相关文章推荐
理解PHP5中static和const关键字的区别
Mar 19 PHP
php Notice: Undefined index 错误提示解决方法
Aug 29 PHP
Php图像处理类代码分享
Jan 19 PHP
PHP获取文件后缀名的三个函数
Oct 15 PHP
PHP 读取和编写 XML
Nov 19 PHP
PHP时间和日期函数详解
May 08 PHP
php如何实现只替换一次或N次
Oct 29 PHP
php防止用户重复提交表单
Nov 02 PHP
PHP框架性能测试报告
May 08 PHP
ThinkPHP5+Layui实现图片上传加预览功能
Aug 17 PHP
php实现记事本案例
Oct 20 PHP
php中pcntl_fork详解
Apr 01 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
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
laravel 5 实现模板主题功能
2015/03/02 PHP
Yii中实现处理前后台登录的新方法
2015/12/28 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
Jquery选中或取消radio示例
2013/09/29 Javascript
javaScript arguments 对象使用介绍
2013/10/18 Javascript
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
node学习记录之搭建web服务器教程
2017/02/16 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
pygame实现俄罗斯方块游戏(基础篇2)
2019/10/29 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
python如何设置静态变量
2020/09/07 Python
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
灵泰克Java笔试题
2016/01/09 面试题
英语演讲稿范文
2014/01/03 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
励志演讲稿200字
2014/08/21 职场文书
无房证明范本
2014/09/17 职场文书
写给医院的感谢信
2015/01/22 职场文书
陪护人员误工证明
2015/06/24 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书