怎么在Laravel6中缓存数据库查询结果-创新互联

怎么在 Laravel 6 中缓存数据库查询结果?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

创新互联主要从事成都做网站、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务昭化,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

安装


可以通过 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 中缓存数据库查询结果的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


文章标题:怎么在Laravel6中缓存数据库查询结果-创新互联
文章位置:http://cdiso.cn/article/dhhpii.html

其他资讯