在互联网和大数据时代,支撑百亿级别数据访问的缓存体系对于提升系统性能至关重要@mikechen
百万并发缓存架构
百万并发(QPS 100万+,峰值千万级),缓存系统本质是“多级拦截 + 分片服务化 + 最终一致性”架构。
核心目标:99.99%请求在缓存层命中,DB只扛<1%流量。

架构,如下:
客户端 ↓ 网关层(限流) ↓ 应用层 ↓ 本地缓存(Caffeine) ↓ 分布式缓存(Redis Cluster) ↓ 数据库(MySQL)
请求入口层:
负载均衡(Nginx/LVS)做流量分发,可以做简单限流、灰度、路由等。
CDN 针对静态资源、图片、小视频做边缘缓存,把静态内容的并发在最外层挡掉 。
业务应用层:
无状态业务服务,从接口维度或业务维度缓存响应结果(例如:接口参数 + 响应内容缓存 1 分钟),减少重复计算 。
本地内存缓存(如 Caffeine、Ehcache)作为 L1,存储极热数据,响应通常是亚毫秒级 。
缓存层:
分布式缓存集群(如 Redis、Memcached、Tair、自研缓存)作为 L2,负责跨节点共享的热点数据 。
可以做多 AZ、分片集群、读写分离,用客户端分片或服务端分片把流量打散到多个节点 。
数据库与保护层
数据库前面可能会有“缓存旁路 + 读写分离”,只在缓存失效时回源读库,写库时异步更新缓存 。
通过限流(如令牌桶、漏桶)、熔断和降级。
在数据库压力过大时,宁可降级展示旧数据或默认值,也不让整个系统雪崩 。
百万并发缓存原理
读流程:本地L1 → Redis L2 → DB(逐层穿透 + 回写)。
首先,搭建本地缓存:本地L1缓存搭建。
Cache<String, Object> localCache = Caffeine.newBuilder()
.maximumSize(10_000_000) // 千万级容量
.expireAfterWrite(5, TimeUnit.MINUTES) // 短TTL
.build();
// 读:localCache.getIfPresent(key) → miss再查Redis
Redis集群部署(Redis Cluster + Sentinel)搭建。

最小3主3从,4096槽自动分片。
开启AOF + RDB混合持久化。
Proxy + Cache Service服务化(微博核心) 客户端SDK直连或走Proxy。
多级读流程:
Object get(String key) {
Object val = localCache.getIfPresent(key); // L1
if (val != null) return val;
val = redis.get(key); // L2
if (val != null) { localCache.put(key, val); return val; }
val = db.query(key); // DB
if (val != null) {
redis.set(key, val, randomExpire(300, 600)); // 随机TTL
localCache.put(key, val);
}
return val;
}
写流程:先写DB → 删/更新多级缓存(Cache Aside Pattern,防不一致)。
最终一致性:异步同步 + 随机TTL + 补偿机制。