在 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初学者写及时补给skype用户充话费的小程序
Nov 02 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
Jun 04 PHP
php去除重复字的实现代码
Sep 16 PHP
PHP中数组合并的两种方法及区别介绍
Sep 14 PHP
php学习笔记之面向对象编程
Dec 29 PHP
部署PHP项目应该注意的几点事项分享
Dec 20 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 PHP
PHP ADODB实现分页功能简单示例
May 25 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
PHP实现考试倒计时功能代码
Apr 16 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的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
php压缩文件夹最新版
2018/07/18 PHP
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
微信小程序 动态传参实例详解
2017/04/27 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
vue iview组件表格 render函数的使用方法详解
2018/03/15 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
Python文件操作类操作实例详解
2014/07/11 Python
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
python实现在windows下操作word的方法
2015/04/28 Python
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
python网络应用开发知识点浅析
2019/05/28 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
python2和python3哪个使用率高
2020/06/23 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
python中pivot()函数基础知识点
2021/01/03 Python
详解px单位html5响应式方案
2018/03/08 HTML / CSS
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
干部作风建设个人剖析材料
2014/10/11 职场文书
优秀班主任推荐材料
2014/12/17 职场文书
经费申请报告
2015/05/15 职场文书
消费者投诉书范文
2015/07/02 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers