8 Cache
缓存介绍
在网站开发中,缓存(Cache)是一个非常重要的概念,其核心作用是提高性能、降低延迟和减轻服务器负载。
缓存是一种存储机制,用于临时存储数据或计算结果,当再次需要这些数据时,可以快速从缓存中检索,而不是重新进行耗时或昂贵的获取和计算过程。
主要的优势包括:
- 提升性能和用户体验:
- 缓存通常存储在更快的介质(如内存 RAM 或靠近用户端的 CDN)中。
- 通过从缓存中快速获取数据,可以显著加快网页加载速度和响应时间,提供更流畅的用户体验。
- 减轻服务器/数据库负载:
- 缓存减少了对原始数据源(如数据库或计算密集型服务)的请求次数。
- 对于高流量网站,这能有效分散压力,避免服务器因处理大量重复请求而达到性能瓶颈。
- 降低网络延迟:
- 如果数据缓存在靠近用户的地理位置(例如浏览器本地缓存或 CDN),可以减少数据传输距离和网络跳数,从而降低整体网络延迟。
- 节省资源和成本:
- 通过减少对高性能计算资源和数据库的查询需求,可以降低基础设施的运行成本。
- 减少不必要的网络传输也能节省带宽成本。
缓存可以存在于多个层面:
- 浏览器缓存(客户端缓存):存储在用户设备上。
- CDN 缓存(内容分发网络):分布在全球各地的服务器,缓存静态资源。
- 反向代理/网关缓存:如 Nginx、Varnish 等。
- 应用层缓存:在应用服务器内部或使用专门的缓存服务(如 Redis、Memcached)。
- 数据库缓存:数据库本身内置的缓存机制。
项目缓存策略
当前项目中使用Redis做Cache缓存。
在 FastAPI 这样的后端框架中,通常在应用层使用像 Redis 这样的内存数据存储作为缓存。
Redis 是一种高性能的 Key-Value 存储系统,它将数据存储在内存中,因此读写速度极快,非常适合作为应用层的缓存服务。
使用 Redis 缓存的基本步骤和场景:
-
连接 Redis:
- 在 FastAPI 应用中,需要安装相应的 Python Redis 客户端库(如
redis-py或aioredis,通常选择支持异步的库)。 - 配置并建立与 Redis 服务器的连接。
- 在 FastAPI 应用中,需要安装相应的 Python Redis 客户端库(如
-
缓存策略(Read-Through / Cache-Aside):
Cache-Aside(旁路缓存)是最常用策略:
- 读操作:
- 应用收到请求后,首先检查 Redis 缓存中是否有对应的数据(Cache Hit)。
- 如果有(命中),直接返回缓存中的数据。
- 如果没有(未命中),则查询数据库或执行计算获取原始数据。
- 将原始数据存入 Redis 缓存,并设置过期时间(TTL)。
- 返回数据。
- 写操作(数据更新):
- 更新数据库中的数据。
- 删除或更新 Redis 中对应的缓存项,以确保缓存数据的新鲜度和一致性。
- 读操作: