首页 > 后端开发 > php教程 > Laravel 中最佳 Redis 缓存策略:快速高效缓存指南

Laravel 中最佳 Redis 缓存策略:快速高效缓存指南

DDD
发布: 2024-11-12 09:29:02
原创
646 人浏览过

Best Redis Caching Strategy in Laravel: A Guide to Fast and Efficient Caching

Laravel 和 Redis 是提高应用程序速度和性能的强大组合。 Redis 是一种内存中键值存储,非常适合缓存,特别是当您需要快速且频繁的数据访问时。在本指南中,我们将了解 Laravel 中使用 Redis 的有效缓存策略。我们将介绍如何缓存数据、管理过期时间以及有效清除缓存。

为什么使用 Redis 缓存?
当您在 Laravel 中使用 Redis 进行缓存时,实际上是临时保存数据以减少查询数据库所花费的时间。缓存可以加快数据检索速度,减少服务器负载,并通过加快页面加载速度来改善用户体验。

Redis 非常适合缓存,因为它:

  • 可以快速存储和检索数据
  • 支持字符串、列表和哈希等各种数据结构
  • 提供管理缓存过期和清除旧数据的工具

让我们探索如何在 Laravel 中最好地使用 Redis 缓存。
假设我们有一个报纸网站。现在我们需要构建 Api 来获取新闻。

1. 使用 Laravel 和 Redis 设置基本缓存

首先,让我们缓存一个简单的 API 响应,例如最新新闻文章的列表。

$data = Cache::remember('latest_news', 3600, function () {
    return News::latest()->get();
});
登录后复制
登录后复制

在此示例中:
Cache::remember 使用键 (latest_news) 和 3600 秒(1 小时)的生存时间 (TTL) 存储数据。
如果一小时内再次收到latest_news 请求,Redis 将提供缓存数据,而无需查询数据库。

2. 构建缓存键和过期时间

保持数据新鲜而不使 Redis 过载:
为频繁更新的数据设置较短的 TTL(例如 15-30 分钟)。
对于很少变化的数据使用较长的 TTL(例如 1-2 小时)。

使用反映数据内容的特定的、结构化的缓存键。例如:

$cacheKey = "news:category:category_1";
登录后复制
登录后复制

该密钥清晰、唯一且具有自描述性,使其易于在 Redis 中识别和管理。

3. 使用标签进行分组缓存管理

Redis 支持标签,这让我们可以在通用标签下管理分组数据。例如,用 news 标记所有与新闻相关的缓存:

Cache::tags(['news', 'category'])->remember('category_news_1', 3600, function () {
    return $this->news_repository->getNewsByCategory(1);
});
登录后复制

现在,如果我们想清除所有特定类别的新闻缓存(当新闻更新时),我们可以使用:

Cache::tags(['news', 'category'])->flush();
登录后复制
  1. 缓存分页和过滤数据 添加分页或过滤器(如类别或标签)时,使每个缓存键对于参数来说是唯一的:
$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();
});
登录后复制
登录后复制

这确保每个类别和页面组合都有自己的缓存条目。

5. 数据更改时自动缓存失效

清除或“无效”缓存可确保用户在必要时看到更新的数据。以下是如何实现自动化:
使用模型观察器来处理创建、更新或删除等事件,以清除相关缓存。
新闻观察者示例:

$cacheKey = "news:category:category_1";
登录后复制
登录后复制

现在,每当添加或更新新闻时,所有新闻和分页标记的缓存都会刷新,保持数据新鲜。

6. 总结和最佳实践

为了使缓存有效工作:
唯一键:带有类别、页面和限制等参数的结构键。
分组数据标签:使用标签轻松管理特定数据组的缓存。
自动失效:设置观察者以清除数据更改时的过时缓存。
设置合理的过期时间:根据数据更改的频率选择 TTL,通常在 15 分钟到 1 小时之间。

通过这种结构化方法使用 Redis 可以使 Laravel API 响应更快,改进服务器负载管理,并确保可靠、高效且易于管理的缓存策略。

以上是Laravel 中最佳 Redis 缓存策略:快速高效缓存指南的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板