在 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 相关文章推荐
MVC模式的PHP实现
Oct 09 PHP
用PHP制作静态网站的模板框架(三)
Oct 09 PHP
php对gzip文件或者字符串解压实例参考
Jul 25 PHP
flash用php连接数据库的代码
Apr 21 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
Nov 17 PHP
培养自己的php编码规范
Sep 28 PHP
php封装的连接Mysql类及用法分析
Dec 10 PHP
thinkPHP5.0框架应用请求生命周期分析
Mar 25 PHP
phpStudy配置多站点多域名和多端口的方法
Sep 01 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
Sep 12 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 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
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
PHP时间和日期函数详解
2015/05/08 PHP
php实现留言板功能
2017/03/05 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
2019/10/03 PHP
一个小型js框架myJSFrame附API使用帮助
2008/06/28 Javascript
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
Python中实现switch功能实例解析
2018/01/11 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
Pytest框架之fixture的详细使用教程
2020/04/07 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
大学毕业生通用求职信
2013/09/28 职场文书
应届生英语教师求职信
2013/11/05 职场文书
网络维护管理员的自我评价分享
2013/11/11 职场文书
出国留学计划书
2014/04/27 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
党员自评材料范文
2014/12/17 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
围城读书笔记
2015/06/26 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书
Mysql Show Profile
2021/04/05 MySQL
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
关于vue-router-link选择样式设置
2022/04/30 Vue.js