在 Laravel 6 中缓存数据库查询结果的方法


Posted in PHP onDecember 11, 2019

在 Laravel 6 中缓存数据库查询结果的方法

在加快应用程序速度方面,缓存可能是最有效的。Laravel 预先安装了缓存驱动程序。因此你可以直接使用 Redis, Memcached 或者使用本地文件进行缓存操作。Laravel 附带了此功能。

这一次,我们将讨论直接从模型缓存 Eloquent 查询,从而使数据库缓存变的轻而易举。

这个包可以在 GitHub 找到,此文档将介绍该应用程序的所有要点。但是,这篇文章,我仅仅介绍缓存和清除缓存的知识。

安装

可以通过 Composer 安装

$ composer require rennokki/laravel-eloquent-query-cache

在你的模型中添加 use  QueryCacheable :

use Rennokki\QueryCache\Traits\QueryCacheable;class Article extends Model
{
  use QueryCacheable;  ...
}

默认情况下启动缓存行为

默认情况下,该包不开启查询缓存。为此,可以在模型中添加 $cacheFor 变量。

use Rennokki\QueryCache\Traits\QueryCacheable;class Article extends Model
{
  use QueryCacheable;  protected $cacheFor = 180; // 3 minutes
}

每当执行一个查询时,缓存将会干预。如果此查询在缓存中为空,那么会去数据库中获取数据,并且缓存它,以便下次可以从缓存中获取。如果此查询存在于缓存中,那么直接返回。

// 数据库访问,查询结果存储在缓存中
Article::latest()->get();// 未访问数据库,查询结果直接从缓存中返回。
Article::latest()->get();

如果你只是想要避免命中缓存,你可以在命中最后一个方法之前使用  ->dontCache() 。

Article::latest()->dontCache()->firstOrFail();

启用逐个查询的缓存行为

另一种方法是,如果默认情况下的缓存机制并不是太好的选择,你可以启用逐个查询的缓存。

首先,从模型中移除变量 $cacheFor。

对于每个查询,你可以调用 ->cacheFor(...) 方法去指定你想缓存的那个查询。

Article::cacheFor(now()->addHours(24))->paginate(15);

用 tags 更好地组织缓存

一些缓存存储,像 Redis 或者 Memcached,提供了对 key 的标记支持。这很有用,因为我们可以在缓存中标记查询,并在需要时再通过 tag 使所需的缓存失效。

举一个简单的例子,如果我们要在更新一篇文章时使文章列表不进行缓存,你可以像这样写。

$articles = Article::cacheFor(60)->cacheTags(['latest:articles'])->latest()->get();
$article = Article::find($id);
$article->update(['title' => 'My new title']);
Article::flushQueryCache(['latest:articles']);

 flushQueryCache方法使用 latest:articles标记使缓存无效。如果其他的一些查询中没有被 latest:articles标记,那么将被保留缓存。

了解更多

有关此软件包的更多信息,请在GitHub 上查看该项目。

PS:Laravel缓存

1,Cache:put('key','val',10);设置缓存

      键:key , 值:val  10:缓存时间十分钟

2,Cache:add('key','val',10);

    设置缓存 key:键,val:值 10:缓存时间十分钟
    (有返回值 : 已经有了缓存则返回false, 没有则返回true并缓存)

3,Cache:forever('key','val');永久缓存

4,Cache:has('key');判断缓存是否存在

5,Cache:get('key');获取缓存

6,Cache:pull('key');获取缓存一次并删除缓存

7,Cache:get('key');删除缓存,true删除成功,false删除失败

总结

以上所述是小编给大家介绍的在 Laravel 6 中缓存数据库查询结果的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

PHP 相关文章推荐
高亮度显示php源代码
Oct 09 PHP
PHP 用数组降低程序的时间复杂度
Dec 04 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
Apr 01 PHP
PHP上传文件时自动分配路径的方法
Jan 09 PHP
WordPress开发中的get_post_custom()函数使用解析
Jan 04 PHP
php 数组随机取值的简单实例
May 23 PHP
thinkPHP内置字符串截取函数用法详解
Nov 15 PHP
Yii框架数据模型的验证规则rules()被执行的方法
Dec 02 PHP
redis查看连接数及php模拟并发创建redis连接的方法
Dec 15 PHP
详解PHP防止盗链防止迅雷下载的方法
Apr 26 PHP
laravel5表单唯一验证的实例代码
Sep 30 PHP
有关PHP 中 config.m4 的探索
Aug 26 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 #PHP
关于PHP5.6+版本“No input file specified”问题的解决
Dec 11 #PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
Jan 07 #PHP
Laravel5.1 框架表单验证操作实例详解
Jan 07 #PHP
PHP字符串与数组处理函数用法小结
Jan 07 #PHP
Laravel5.1 框架响应基本用法实例分析
Jan 04 #PHP
Laravel5.1 框架Request请求操作常见用法实例分析
Jan 04 #PHP
You might like
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
编辑浪子版表单验证类
2007/05/12 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
jQuery中closest()函数用法实例
2015/01/07 Javascript
js实现jquery的offset()方法实例
2015/01/10 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
js实现表格筛选功能
2017/01/18 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
python实现简单tftp(基于udp协议)
2018/07/30 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
2020/10/15 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
介绍一下如何利用路径遍历进行攻击及如何防范
2014/01/19 面试题
初婚未育未抱养证明
2014/01/12 职场文书
5.1手机促销活动
2014/01/17 职场文书
工地安全检查制度
2014/02/04 职场文书
管理失职检讨书
2014/02/12 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
实习生辞职信范文
2015/03/02 职场文书