在 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程序员的技术瓶颈分析
Jul 17 PHP
php中如何同时使用session和cookie来保存用户登录信息
Jul 05 PHP
php一行代码获取文件后缀名实例分析
Nov 12 PHP
浅谈php自定义错误日志
Feb 13 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
php用正则判断是否为数字的方法
Mar 25 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
Jul 28 PHP
php is_executable判断给定文件名是否可执行实例
Sep 26 PHP
详解PHP的抽象类和抽象方法以及接口总结
Mar 15 PHP
阿里对象存储OSS在laravel框架中的使用方法
Oct 13 PHP
如何在PHP中生成随机数
Jun 04 PHP
PHP扩展安装方法步骤解析
Nov 24 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二维数组转成字符串示例
2014/02/17 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
php实现比较全的数据库操作类
2015/06/18 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
js 窗口抖动示例
2013/09/04 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
基于JavaScript实现跳转提示页面
2016/09/24 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
python按行读取文件,去掉每行的换行符\n的实例
2018/04/19 Python
python将txt等文件中的数据读为numpy数组的方法
2018/12/22 Python
Python的高阶函数用法实例分析
2019/04/11 Python
python搜索包的路径的实现方法
2019/07/19 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
Python如何实现邮件功能
2020/05/27 Python
python实现斗地主分牌洗牌
2020/06/22 Python
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
经典c++面试题三
2015/07/08 面试题
工程预算与管理应届生求职信
2013/10/06 职场文书
消防战士优秀事迹材料
2014/02/13 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
公司请假条格式
2014/04/11 职场文书
法定代表人身份证明书
2014/09/10 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
观后感的写法
2015/06/19 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL