Skip to content

8 Cache

缓存介绍

在网站开发中,缓存(Cache)是一个非常重要的概念,其核心作用是提高性能降低延迟减轻服务器负载

缓存是一种存储机制,用于临时存储数据或计算结果,当再次需要这些数据时,可以快速从缓存中检索,而不是重新进行耗时或昂贵的获取和计算过程。

主要的优势包括:

  1. 提升性能和用户体验:
    • 缓存通常存储在更快的介质(如内存 RAM 或靠近用户端的 CDN)中。
    • 通过从缓存中快速获取数据,可以显著加快网页加载速度和响应时间,提供更流畅的用户体验。
  2. 减轻服务器/数据库负载:
    • 缓存减少了对原始数据源(如数据库或计算密集型服务)的请求次数。
    • 对于高流量网站,这能有效分散压力,避免服务器因处理大量重复请求而达到性能瓶颈。
  3. 降低网络延迟:
    • 如果数据缓存在靠近用户的地理位置(例如浏览器本地缓存或 CDN),可以减少数据传输距离和网络跳数,从而降低整体网络延迟。
  4. 节省资源和成本:
    • 通过减少对高性能计算资源和数据库的查询需求,可以降低基础设施的运行成本。
    • 减少不必要的网络传输也能节省带宽成本。

缓存可以存在于多个层面:

  • 浏览器缓存(客户端缓存):存储在用户设备上。
  • CDN 缓存(内容分发网络):分布在全球各地的服务器,缓存静态资源。
  • 反向代理/网关缓存:如 Nginx、Varnish 等。
  • 应用层缓存:在应用服务器内部或使用专门的缓存服务(如 Redis、Memcached)。
  • 数据库缓存:数据库本身内置的缓存机制。

项目缓存策略

当前项目中使用Redis做Cache缓存。

FastAPI 这样的后端框架中,通常在应用层使用像 Redis 这样的内存数据存储作为缓存。

Redis 是一种高性能的 Key-Value 存储系统,它将数据存储在内存中,因此读写速度极快,非常适合作为应用层的缓存服务。

使用 Redis 缓存的基本步骤和场景:

  1. 连接 Redis:

    • 在 FastAPI 应用中,需要安装相应的 Python Redis 客户端库(如 redis-pyaioredis,通常选择支持异步的库)。
    • 配置并建立与 Redis 服务器的连接。
  2. 缓存策略(Read-Through / Cache-Aside):

    Cache-Aside(旁路缓存)是最常用策略:

    • 读操作:
      • 应用收到请求后,首先检查 Redis 缓存中是否有对应的数据(Cache Hit)。
      • 如果有(命中),直接返回缓存中的数据。
      • 如果没有(未命中),则查询数据库或执行计算获取原始数据。
      • 将原始数据存入 Redis 缓存,并设置过期时间(TTL)
      • 返回数据。
    • 写操作(数据更新):
      • 更新数据库中的数据。
      • 删除或更新 Redis 中对应的缓存项,以确保缓存数据的新鲜度一致性