在 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水印技术
Feb 14 PHP
DedeCms模板安装/制作概述
Mar 11 PHP
php学习笔记 数组遍历实现代码
Jun 09 PHP
PHP错误机制知识汇总
Mar 24 PHP
PHP 常用时间函数资料整理
Oct 22 PHP
php 可变函数使用小结
Jun 12 PHP
PHP关于foreach复制知识点总结
Jan 28 PHP
PHP xpath()函数讲解
Feb 11 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
Feb 25 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 PHP
如何在PHP中使用数组
Jun 09 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获取twitter最新消息的方法
2015/04/14 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
2018/05/10 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
jQuery实现的老虎机跑动效果示例
2018/12/29 jQuery
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
python 获取url中的参数列表实例
2018/12/18 Python
树莓派实现移动拍照
2019/06/22 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
CSS3实现酷炫的3D旋转透视效果
2019/11/21 HTML / CSS
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
2015年党员干部承诺书
2015/01/21 职场文书
个人培训总结
2015/03/05 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers