当前位置: 首页 > 后端技术 > PHP

如何在Laravel6中缓存数据库查询结果?

时间:2023-03-29 17:43:32 PHP

文章转发自专业的Laravel开发者社区,原文链接:https://learnku.com/laravel/t...缓存可能是加速应用程序最有效的方法。Laravel预装了缓存驱动程序。所以可以直接使用Redis、Memcached或者使用本地文件进行缓存操作。Laravel自带这个功能。这一次,我们将讨论直接从模型缓存Eloquent查询,使数据库缓存变得轻而易举。该包在GitHub上可用,本文档将介绍应用程序的所有基本要素。不过,在这篇文章中,我只介绍了缓存和清除缓存的知识。安装可以通过Composer安装$composerrequirerennokki/laravel-eloquent-query-cache添加useQueryCacheable到你的模型中:useRennokki\QueryCache\Traits\QueryCacheable;classArticleextendsModel{useQueryCacheable;...}默认启用缓存行为默认情况下,此包不启用查询缓存。为此,请将$cacheFor变量添加到您的模型中。使用Rennokki\QueryCache\Traits\QueryCacheable;类文章扩展模型{使用QueryCacheable;保护$cacheFor=180;//3分钟}每当执行查询时,缓存都会介入。如果查询在缓存中为空,则会去数据库中获取数据并缓存起来,以便下次从缓存中取出。如果查询在缓存中存在,则直接返回。//访问数据库,查询结果保存在缓存中Article::latest()->get();//不访问数据库,查询结果直接从缓存中返回。文章::最新()->get();如果你只是想避免命中缓存,你可以在命中最后一个方法之前使用->dontCache()。Article::latest()->dontCache()->firstOrFail();启用query-by-query缓存行为的另一种方法是,如果默认缓存机制不是一个好的选择,您可以启用query-by-query缓存。首先,从模型中删除变量$cacheFor。对于每个查询,您可以调用->cacheFor(...)方法来指定要缓存的查询。Article::cacheFor(now()->addHours(24))->paginate(15);使用标签更好地组织缓存一些缓存存储,如Redis或Memcached,为键提供标签支持。这很有用,因为我们可以在缓存中标记查询,然后在需要时传递标记以使所需的缓存无效。举个简单的例子,如果我们想在一篇文章更新的时候不缓存文章列表,可以这样写。$articles=Article::cacheFor(60)->cacheTags(['latest:articles'])->latest()->get();$article=Article::find($id);$article->更新(['title'=>'我的新标题']);Article::flushQueryCache(['latest:articles']);flushQueryCache方法使用latest:articles标签使缓存无效。如果其他一些查询没有被latest:articles标记,它将被保存在缓存中。要了解有关此包的更多信息,请查看GitHub上的项目。