Laravel 和 Redis 是提高应用程序速度和性能的强大组合。 Redis 是一种内存中键值存储,非常适合缓存,特别是当您需要快速且频繁的数据访问时。在本指南中,我们将了解 Laravel 中使用 Redis 的有效缓存策略。我们将介绍如何缓存数据、管理过期时间以及有效清除缓存。
为什么使用 Redis 缓存?
当您在 Laravel 中使用 Redis 进行缓存时,实际上是临时保存数据以减少查询数据库所花费的时间。缓存可以加快数据检索速度,减少服务器负载,并通过加快页面加载速度来改善用户体验。
Redis 非常适合缓存,因为它:
让我们探索如何在 Laravel 中最好地使用 Redis 缓存。
假设我们有一个报纸网站。现在我们需要构建 Api 来获取新闻。
首先,让我们缓存一个简单的 API 响应,例如最新新闻文章的列表。
$data = Cache::remember('latest_news', 3600, function () { return News::latest()->get(); });
在此示例中:
Cache::remember 使用键 (latest_news) 和 3600 秒(1 小时)的生存时间 (TTL) 存储数据。
如果一小时内再次收到latest_news 请求,Redis 将提供缓存数据,而无需查询数据库。
保持数据新鲜而不使 Redis 过载:
为频繁更新的数据设置较短的 TTL(例如 15-30 分钟)。
对于很少变化的数据使用较长的 TTL(例如 1-2 小时)。
使用反映数据内容的特定的、结构化的缓存键。例如:
$cacheKey = "news:category:category_1";
该密钥清晰、唯一且具有自描述性,使其易于在 Redis 中识别和管理。
Redis 支持标签,这让我们可以在通用标签下管理分组数据。例如,用 news 标记所有与新闻相关的缓存:
Cache::tags(['news', 'category'])->remember('category_news_1', 3600, function () { return $this->news_repository->getNewsByCategory(1); });
现在,如果我们想清除所有特定类别的新闻缓存(当新闻更新时),我们可以使用:
Cache::tags(['news', 'category'])->flush();
$page = request()->input('page', 1); $limit = request()->input('limit', 10); $cacheKey = "news:page_{$page}:limit_{$limit}"; $newsData = Cache::remember($cacheKey, 3600, function () use ($page, $limit) { return News::latest()->paginate($limit, ['*'], 'page', $page); });
这边:
为每个页面和限制创建一个唯一的缓存条目。
用户可以快速获取页面,无需重新查询数据库。
对于过滤后的数据,请在键中包含过滤器参数:
$data = Cache::remember('latest_news', 3600, function () { return News::latest()->get(); });
这确保每个类别和页面组合都有自己的缓存条目。
清除或“无效”缓存可确保用户在必要时看到更新的数据。以下是如何实现自动化:
使用模型观察器来处理创建、更新或删除等事件,以清除相关缓存。
新闻观察者示例:
$cacheKey = "news:category:category_1";
现在,每当添加或更新新闻时,所有新闻和分页标记的缓存都会刷新,保持数据新鲜。
为了使缓存有效工作:
唯一键:带有类别、页面和限制等参数的结构键。
分组数据标签:使用标签轻松管理特定数据组的缓存。
自动失效:设置观察者以清除数据更改时的过时缓存。
设置合理的过期时间:根据数据更改的频率选择 TTL,通常在 15 分钟到 1 小时之间。
通过这种结构化方法使用 Redis 可以使 Laravel API 响应更快,改进服务器负载管理,并确保可靠、高效且易于管理的缓存策略。
以上是Laravel 中最佳 Redis 缓存策略:快速高效缓存指南的详细内容。更多信息请关注PHP中文网其他相关文章!