【发布时间】:2020-09-02 16:46:29
【问题描述】:
在我的客户商店中,我使用 redis 作为缓存驱动程序。它用于存储需要大量查询的页面部分 - 如产品列表、产品视图、类别视图。 (呈现页面的中间部分)。以下是一小段代码(已删减!):
class CategoryController extends BaseController
{
public function index(Request $request)
{
return View('themes.frontend.pages.category.index', [
'content' => $this->getCategoryCache($request)
]);
}
private function getCategoryCache($request)
{
return Cache::remember($this->getCacheKey($params), 296000, function () use ($request) {
return View('themes.frontend.pages.category.index_content')->render();
}
}
因此,当用户访问类别时,它会调用索引来调用其他功能的内容。在这个例子中 getCategoryCache 搜索缓存键并返回它。缓存的值是渲染并存储在redis中的html视图。如果缓存键不存在,则调用数据库获取数据并呈现视图,然后存储在 redis 中。
问题是:如何为商店中的“例如”类别页面生成所有缓存键? 问题的原因 - 当我有时需要转储整个缓存时,需要时间来重建它,因为必须访问页面才能填满 redis。所以第一个用户不会“感受到”redis 速度优势。
我正在考虑为所有类别调用 db 并 foreach 它们;然后自定义函数将生成密钥。棘手的部分 - 有 3500 个类别和 25k 种产品需要生成。
有什么合理的方法吗?
非常感谢您的帮助! 祝你有美好的一天
【问题讨论】: