在 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静态新闻列表自动生成代码
Jun 14 PHP
php函数之子字符串替换 str_replace
Mar 23 PHP
php ci框架验证码实例分析
Jun 26 PHP
php实现与erlang的二进制通讯实例解析
Jul 23 PHP
PHP比你想象的好得多
Nov 27 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
Yii框架实现图片上传的方法详解
May 20 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
Jul 09 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
Yii框架响应组件用法实例分析
Sep 04 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
Oct 01 PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 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
Search Engine Friendly的URL设计
2006/10/09 PHP
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
jQuery.extend()的实现方式详解及实例
2013/06/29 Javascript
javascript 动态创建表格
2015/01/08 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
2016/08/05 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
Django values()和value_list()的使用
2020/03/31 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
详解python tcp编程
2020/08/24 Python
10个示例带你掌握python中的元组
2020/11/23 Python
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
什么是SCM(软件配置管理)
2014/08/16 面试题
入党综合考察材料
2014/06/02 职场文书
商家认证委托书格式
2014/10/16 职场文书
学雷锋活动简报
2015/07/20 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书