我有laravel(7. x)应用程序。我最近添加该高速缓存功能以提高性能。在实现缓存功能后,我在以网格格式加载数据时遇到了分页问题,所以我在谷歌上搜索解决方案,找到了这个Pagination with cache in Laravel。
虽然,它确实解决了我的问题。但是,情况是,我有大约100个页面,由于我找到的解决方案,每个页面都有自己的缓存。现在,如果我创建或更新任何记录,它不会反映在网格中,因为数据是该高速缓存加载的。
- 邮件控制器.php:*
...
$arraySearch = request()->all();
# calculating selected tab
$cache = (!empty(request()->inactive)) ? 'inactive' : 'active';
$cacheKey = strtoupper("{$this->controller}-index-{$cache}-{$arraySearch['page']}");
# caching the fetch data
$arrayModels = cache()->remember($cacheKey, 1440, function() use ($arraySearch) {
# models
$Post = new Post();
# returning
return [
'active' => $Post->_index(1, 'active', $arraySearch),
'inactive' => $Post->_index(0, 'inactive', $arraySearch),
];
});
...
- 张贴.php:*
public function _index($status = 1, $page = null, $arraySearch = null)
{
...
$Self = self::where('status', $status)
->orderBy('status', 'ASC')
->orderBy('title', 'ASC')
->paginate(10);
...
return $Self;
}
如何清除所有缓存,以便将新创建或更新的记录与更新值一起显示到。
3条答案
按热度按时间af7jpaap1#
1.将所有页面存储在同一标记下:
如文档所示:https://laravel.com/docs/master/cache#storing-tagged-cache-items您可以使用标记对缓存的项目进行分组。
2.在Post上设置事件监听器以清除标记
您可以在Post update()或create()事件上运行事件侦听器。https://laravel.com/docs/7.x/eloquent#events-using-closures
然后可以使用以下命令清除标记缓存
qmelpv7a2#
我知道这不是正确的解决方案,但是,在我找到正确的方法之前,这是我唯一的选择。
当我找到一个合适的解决方案时,我会发布。在那之前,我使用这个。
qgelzfjb3#
Laravel Model类中有一个名为
booted
的方法(不是boot
,它有不同的用途),每次“保存”(包括“更新”)或“删除”某个东西时,这个方法都会运行。我已经使用如下(在一个模型;或包含在模型中的特性):
“updateCaches”是Trait(或Model)中的一个方法,它可以包含更新该高速缓存的代码。