文章转发自专业的Laravel开发者社区,原始连接:learnku.com/laravel/t/3…laravel
在加快应用程序速度方面,缓存多是最有效的。Laravel 预先安装了缓存驱动程序。所以你能够直接使用 Redis, Memcached 或者使用本地文件进行缓存操做。Laravel 附带了此功能。git
这一次,咱们将讨论直接从模型缓存 Eloquent 查询,从而使数据库缓存变的垂手可得。github
这个包能够在 GitHub 找到,此文档将介绍该应用程序的全部要点。可是,这篇文章,我仅仅介绍缓存和清除缓存的知识。数据库
能够经过 Composer 安装缓存
$ composer require rennokki/laravel-eloquent-query-cache
复制代码
在你的模型中添加 use QueryCacheable
:bash
use Rennokki\QueryCache\Traits\QueryCacheable;class Article extends Model
{
use QueryCacheable; ...
}
复制代码
默认状况下,该包不开启查询缓存。为此,能够在模型中添加 $cacheFor
变量。composer
use Rennokki\QueryCache\Traits\QueryCacheable;class Article extends Model
{
use QueryCacheable; protected $cacheFor = 180; // 3 minutes
}
复制代码
每当执行一个查询时,缓存将会干预。若是此查询在缓存中为空,那么会去数据库中获取数据,而且缓存它,以便下次能够从缓存中获取。若是此查询存在于缓存中,那么直接返回。ui
// 数据库访问,查询结果存储在缓存中
Article::latest()->get();// 未访问数据库,查询结果直接从缓存中返回。
Article::latest()->get();
复制代码
若是你只是想要避免命中缓存,你能够在命中最后一个方法以前使用 ->dontCache()
。spa
Article::latest()->dontCache()->firstOrFail();
复制代码
另外一种方法是,若是默认状况下的缓存机制并非太好的选择,你能够启用逐个查询的缓存。code
首先,从模型中移除变量 $cacheFor
。
对于每一个查询,你能够调用 ->cacheFor(...)
方法去指定你想缓存的那个查询。
Article::cacheFor(now()->addHours(24))->paginate(15);
复制代码
一些缓存存储,像 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 上查看该项目。