推荐答案
在 FastAPI 中使用缓存可以通过多种方式实现,常见的方式包括使用内存缓存(如 lru_cache
)、外部缓存系统(如 Redis)或 FastAPI 的依赖注入系统。以下是使用 lru_cache
和 Redis 的示例:
使用 lru_cache
进行内存缓存
-- -------------------- ---- ------- ---- ------- ------ ------- ---- --------- ------ --------- --- - --------- ----------------------- --- ------------------------ ----- - --------- ------ - - - ------------------------ ----- --- ---------- ----- ------ - ------------------------ ------ ---------- -------
使用 Redis 进行外部缓存
-- -------------------- ---- ------- ---- ------- ------ ------- ---- ----- ------ ----- --- - --------- ----- - ----------------------- ---------- ----- ------------------------ ----- --- ---------- ----- ------------- - ------------------------- -- -------------- ------ ---------- ------------------- ------ - - - - ------------------------- ------- ------ ---------- -------
本题详细解读
1. 内存缓存(lru_cache
)
lru_cache
是 Python 标准库中的一个装饰器,用于实现最近最少使用(LRU)缓存策略。它适用于缓存那些计算成本较高且结果不经常变化的函数。maxsize
参数指定了缓存的最大容量,超过这个容量时,最久未使用的缓存项会被移除。
- 优点:简单易用,无需额外依赖。
- 缺点:缓存仅存在于内存中,应用重启后缓存会丢失。
2. 外部缓存(Redis)
Redis 是一个高性能的键值存储系统,常用于缓存、消息队列等场景。通过 Redis,可以将缓存数据存储在外部,从而实现跨应用实例的缓存共享。
- 优点:缓存持久化,支持分布式缓存。
- 缺点:需要额外的 Redis 服务器,增加了系统复杂性。
3. 缓存策略的选择
- 内存缓存:适用于单实例应用或缓存数据量较小的场景。
- 外部缓存:适用于多实例应用或需要持久化缓存的场景。
4. 缓存失效与更新
在实际应用中,缓存失效和更新是一个重要问题。可以通过设置缓存的过期时间(TTL)或在数据更新时主动清除缓存来解决这个问题。
# 设置缓存过期时间 redis.set(f"compute:{x}", result, ex=3600) # 缓存1小时后过期 # 主动清除缓存 redis.delete(f"compute:{x}")
通过合理选择缓存策略和缓存失效机制,可以显著提升 FastAPI 应用的性能。