分享一个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 生成静态页面的办法与实现代码详细版
Feb 15 PHP
PHP合并两个数组的两种方式的异同
Sep 14 PHP
ThinkPHP验证码和分页实例教程
Aug 22 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
PHP中__FILE__、dirname与basename用法实例分析
Dec 01 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
php获取文件后缀的9种方法
Mar 22 PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 PHP
Bootstrap+PHP实现多图上传功能实例详解
Apr 08 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 PHP
PHP mkdir创建文件夹实现方法解析
Nov 13 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
我的论坛源代码(五)
2006/10/09 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
Google韩国首页图标动画效果
2007/08/26 Javascript
JAVASCRIPT keycode总结
2009/02/04 Javascript
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
JavaScript实现表格快速变色效果代码
2015/08/19 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
Vue和Bootstrap的整合思路详解
2017/06/30 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
JS实现字符串翻转的方法分析
2018/08/31 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
python学习笔记:字典的使用示例详解
2014/06/13 Python
Python排序算法实例代码
2017/08/10 Python
深入理解Django的中间件middleware
2018/03/14 Python
python3实现逐字输出的方法
2019/01/23 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
Python 高效编程技巧分享
2020/09/10 Python
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
Hunkemöller西班牙:欧洲最大的内衣连锁店
2018/08/15 全球购物
中学教师实习自我鉴定
2013/09/28 职场文书
年度献血先进个人事迹材料
2014/02/14 职场文书
充分就业社区汇报材料
2014/05/07 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
导游词格式
2015/02/13 职场文书
水电工岗位职责
2015/02/14 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书