在 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 相关文章推荐
xajax写的留言本
Nov 25 PHP
php 中文处理函数集合
Aug 27 PHP
php 缓存函数代码
Aug 27 PHP
php使用正则表达式获取图片url的方法
Jan 16 PHP
分享PHP守护进程类
Dec 30 PHP
浅谈PHP中的数据传输CURL
Sep 06 PHP
利用php_imagick实现复古效果的方法
Oct 18 PHP
PHP之将POST数据转化为字符串的实现代码
Nov 03 PHP
php+lottery.js实现九宫格抽奖功能
Jul 21 PHP
php连接mysql数据库最简单的实现方法
Sep 24 PHP
数据结构之利用PHP实现二分搜索树
Oct 25 PHP
PHP设计模式之命令模式示例详解
Dec 20 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目录与文件操作
2011/12/30 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
ExtJS 2.0 实用简明教程之布局概述
2009/04/29 Javascript
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
Js获取事件对象代码
2010/08/05 Javascript
使用ExtJS技术实现的拖动树结点
2010/08/05 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
python新手经常遇到的17个错误分析
2014/07/30 Python
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
详解Django中的form库的使用
2015/07/18 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
体育教师自我鉴定
2014/02/12 职场文书
售后服务承诺书范文
2014/03/26 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
教师个人事迹材料
2014/12/17 职场文书
2015年幼儿园教研活动总结
2015/03/25 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
python实现简单的名片管理系统
2021/04/26 Python
redis实现排行榜功能
2021/05/24 Redis
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS