分布式缓存
穿透、雪崩、锁
CAP,BloomFilter,热点Key,
缓存穿透
定义:从缓存查不到Key的value时,要去持久层查询DB。
问题:从而对DB造成巨大的负载压力。
解决方案: 关键在于至多查询一次DB。
- 缓存Empty Value, 并且加上Expire Time。——解决穿透,防止永久。
- 如果DB有值,则要Set此空值。——保证数据一致。
- 查询时先使用布隆过滤器。???
多线程情况下如何保证只查一次?
缓存雪崩
定义:如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,造成了缓存雪崩。——加大DB的负责。
问题:从而对DB造成巨大的负载压力。像雪崩一样。
解决方案:
- 加锁防止读写;
- 二级缓存,设置不同的时间有效期
- 不同的key,不同的过期时间。
- 缓存reload机制???
分布式锁
锁:
热点Key
定义:
(1) 这个key是一个热点key(例如一个重要的新闻,一个热门的八卦新闻等等),所以这种key访问量可能非常大。
(2) 缓存的构建是需要一定时间的。(可能是一个复杂计算,例如复杂的sql、多次IO、多个依赖(各种接口)等等)
问题:在缓存失效的瞬间,有大量线程来构建缓存(见下图),造成后端负载加大,甚至可能会让系统崩溃 。
解决方案:
Ref: https://blog.csdn.net/wang0112233/article/details/79558612