数据一致性
缓存穿透
缓存雪崩
缓存高可用
缓存热点下面逐一介绍分析这些问题以及相应的解决方案.
数据一致性
因为缓存属于持久化数据的一个副本, 因此不可避免的会出现数据不一致问题. 导致脏读或读不到数据的情况. 数据不一致, 一般是因为网络不稳定或节点故障导致
问题出现的常见 3 个场景以及解决方案:
数据一致性问题场景及解决
缓存穿透
缓存一般是 Key,value 方式存在, 当某一个 Key 不存在时会查询数据库, 假如这个 Key, 一直不存在, 则会频繁的请求数据库, 对数据库造成访问压力.
主要解决方案:
对结果为空的数据也进行缓存, 当此 key 有数据后, 清理缓存
一定不存在的 key, 采用布隆过滤器, 建立一个大的 Bitmap 中, 查询时通过该 bitmap 过滤
缓存雪崩
缓存雪崩
缓存高可用
缓存是否高可用, 需要根据实际的场景而定, 并不是所有业务都要求缓存高可用, 需要结合具体业务, 具体情况进行方案设计, 例如临界点是是否对后端的数据库造成影响.
主要解决方案:
分布式: 实现数据的海量缓存
复制: 实现缓存数据节点的高可用
缓存热点
一些特别热点的数据, 高并发访问同一份缓存数据, 导致缓存服务器压力过大.
解决: 复制多份缓存副本, 把请求分散到多个缓存服务器上, 减轻缓存热点导致的单台缓存服务器压力
来源: https://juejin.im/entry/5b51479e6fb9a04fea58978d