缓存服务基础概念

学习缓存的基本原理、常见模式和术语,建立缓存服务选型的基础认知

缓存服务基础概念

什么是缓存

缓存是将频繁访问的数据存储在高速存储层中,以减少对后端数据源的访问压力,提升系统响应速度。

缓存的核心价值

维度无缓存有缓存
响应时间毫秒级(DB 查询)微秒级(内存读取)
吞吐量受限于 DB 连接数单机 10w+ QPS
扩展性垂直扩展为主水平扩展(集群/分片)
成本DB 资源昂贵内存成本可控

常见缓存模式

Cache-Aside(旁路缓存)

最常用的模式,应用同时连接缓存和数据库:

读:应用 → 缓存(miss) → DB → 写入缓存 → 返回
写:应用 → DB → 删除/更新缓存

适用:读多写少,对一致性要求不极端严格的场景。

Read-Through / Write-Through

缓存层代理所有读写,应用只与缓存交互:

读:应用 → 缓存(miss) → 缓存自动加载 DB → 返回
写:应用 → 缓存 → 缓存同步写 DB → 返回

适用:需要缓存与 DB 强一致的场景,但写入延迟较高。

Write-Behind(异步回写)

写入只到缓存,异步批量刷入 DB:

写:应用 → 缓存 → 返回(异步:缓存 → DB)

适用:写密集型场景,但有数据丢失风险。

主流缓存服务对比

服务数据结构持久化集群典型场景
RedisString/Hash/List/Set/ZSet/Stream/…RDB + AOFCluster(16384 槽位)通用缓存、会话、排行榜、消息队列
Valkey同 Redis(兼容)同 Redis同 RedisRedis 替代方案(开源协议变更后)
Memcached纯 Key-Value客户端分片简单 KV 缓存、Session 存储
Dragonfly同 Redis(兼容)快照单机多线程高性能替代 Redis

缓存常见问题

缓存穿透

查询不存在的数据,绕过缓存直接打到 DB。

解决:

  • 布隆过滤器前置过滤
  • 空值缓存(短 TTL)

缓存击穿

热点 key 过期瞬间,大量并发请求同时打到 DB。

解决:

  • 互斥锁更新(SETNX)
  • 永不过期 + 异步刷新

缓存雪崩

大量 key 同时过期或缓存集群宕机。

解决:

  • TTL 加随机偏移
  • 多级缓存(本地 + 远程)
  • 限流降级

缓存一致性策略

策略方式一致性性能
Cache-Aside + 删除写 DB → 删缓存最终一致
延迟双删删缓存 → 写 DB → 延迟再删较高
订阅 BinlogCanal 监听 MySQL Binlog → 更新缓存较高
分布式锁写操作加锁强一致

选型建议

  • 简单 KV 缓存、Session 存储 → Memcached
  • 复杂数据结构、持久化、高可用 → Redis / Valkey
  • 极致性能、Redis 兼容 → Dragonfly
  • 关注开源协议、社区驱动 → Valkey