分享一个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的库,结果发现很多东西
Dec 31 PHP
通过PHP CLI实现简单的数据库实时监控调度
Jul 01 PHP
PHP 面向对象实现代码
Nov 11 PHP
一道关于php变量引用的面试题
Aug 08 PHP
php中filter函数验证、过滤用户输入的数据
Jan 13 PHP
PHP实现生成唯一编号(36进制的不重复编号)
Jul 01 PHP
php实现的DateDiff和DateAdd时间函数代码分享
Aug 16 PHP
PHP的APC模块实现上传进度条
Oct 27 PHP
php执行多个存储过程的方法【基于thinkPHP】
Nov 08 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
ThinkPHP实现的rsa非对称加密类示例
May 29 PHP
php中的buffer缓冲区用法分析
May 31 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中Smarty模板初体验
2011/08/08 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
Yii2实现自定义独立验证器的方法
2017/05/05 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
js多级树形弹出一个小窗口层(非常好用)实例代码
2013/03/19 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
javascript与css3动画结合使用小结
2015/03/11 Javascript
js获取页面description的方法
2015/05/21 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
jQuery无刷新分页完整实例代码
2015/10/27 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
[01:55]《走出家门看比赛》——DOTA2 2015国际邀请赛同城线下观战
2015/07/18 DOTA
Python实现一个简单的验证码程序
2017/11/03 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
Django如何实现防止XSS攻击
2020/10/13 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
汽车专业毕业生自荐信
2013/11/03 职场文书
计算机专业推荐信范文
2013/11/20 职场文书
小学教师节活动方案
2014/01/31 职场文书
师范生求职自荐信
2014/06/14 职场文书
2014年科普工作总结
2014/12/06 职场文书
使用pytorch实现线性回归
2021/04/11 Python
世界十大儿童漫画书排名,法国国宝漫画排第五,第二是轰动日本连环
2022/03/18 欧美动漫