序言
如果没有缓存,一个高并发系统会怎样?用户每一次查询都访问数据库,数据库的 CPU、磁盘 IO、连接数都会快速达到瓶颈,系统响应时间越来越长,最终无法支撑业务增长。因此,缓存几乎成为了现代互联网高并发系统的标准配置。
但是,当我们引入缓存之后,又会发现新的问题接踵而至:
- 数据库已经更新了,为什么用户看到的还是旧数据?
- 为什么有的缓存 Key 过期了,数据库就突然被打挂了?
- 为什么在 Redis 集群中,有的节点压力很大而有的却相对空闲?
这些问题背后,其实都指向同一个核心:缓存不是数据源,而是数据源的副本。
只要是副本,就必然存在一致性问题;只要存在失效,就必然存在高并发下的流量冲击。
因此,缓存设计的本质,不是简单地把数据放进 Redis,而是在性能、复杂度和一致性之间寻找一个合理的平衡点。
接下来,我们将从缓存一致性问题开始,逐步分析缓存的工作原理,以及高并发场景下各种典型问题的解决方案。