分享一个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_MySQL教程-第一天
Mar 18 PHP
php date与gmdate的获取日期的区别
Feb 08 PHP
色色整理的PHP面试题集锦
Mar 08 PHP
php array的学习笔记
May 16 PHP
兼容ie6浏览器的php下载文件代码分享
Jul 14 PHP
PHP中使用break跳出多重循环代码实例
Jan 21 PHP
PHP实现获取中英文首字母
Jun 19 PHP
thinkPHP中分页用法实例分析
Dec 26 PHP
PHP设计模式之简单投诉页面实例
Feb 24 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
php中让人头疼的浮点数运算分析
Oct 10 PHP
YII分模块加载路由的实现方法
Oct 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
PHP 查找字符串常用函数介绍
2012/06/07 PHP
PHP 读取Postgresql中的数组
2013/04/14 PHP
Yii 框架使用Forms操作详解
2020/05/18 PHP
Yii redis集合的基本使用教程
2020/06/14 PHP
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
纯JavaScript实现的分页插件实例
2015/07/14 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
微信小程序使用map组件实现解析经纬度功能示例
2019/01/22 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
js实现图片实时时钟
2020/01/15 Javascript
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
python封装对象实现时间效果
2020/04/23 Python
OpenCV+Python识别车牌和字符分割的实现
2019/01/31 Python
Python @property及getter setter原理详解
2020/03/31 Python
解决python对齐错误的方法
2020/07/16 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
ASP.NET Core中的配置详解
2021/02/05 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
什么是方法的重载
2013/06/24 面试题
外贸公司实习自我鉴定
2013/09/24 职场文书
会计电算化专业个人的自我评价
2013/11/24 职场文书
高中生学习生活的自我评价
2013/11/27 职场文书
学校清明节活动总结
2014/07/04 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
2015上半年个人工作总结
2015/07/27 职场文书
会议室管理制度范本
2015/08/06 职场文书