分布式缓存

穿透、雪崩、锁

CAP,BloomFilter,热点Key,

缓存穿透

定义:从缓存查不到Key的value时,要去持久层查询DB。

问题:从而对DB造成巨大的负载压力。

解决方案: 关键在于至多查询一次DB。

  1. 缓存Empty Value, 并且加上Expire Time。——解决穿透,防止永久。
  2. 如果DB有值,则要Set此空值。——保证数据一致。
  3. 查询时先使用布隆过滤器。???

多线程情况下如何保证只查一次?

缓存雪崩

定义:如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,造成了缓存雪崩。——加大DB的负责。

问题:从而对DB造成巨大的负载压力。像雪崩一样。

解决方案:

  1. 加锁防止读写;
  2. 二级缓存,设置不同的时间有效期
  3. 不同的key,不同的过期时间。
  4. 缓存reload机制???

分布式锁

锁:

热点Key

定义:

(1) 这个key是一个热点key(例如一个重要的新闻,一个热门的八卦新闻等等),所以这种key访问量可能非常大。

(2) 缓存的构建是需要一定时间的。(可能是一个复杂计算,例如复杂的sql、多次IO、多个依赖(各种接口)等等)

问题:在缓存失效的瞬间,有大量线程来构建缓存(见下图),造成后端负载加大,甚至可能会让系统崩溃 。

解决方案:

Ref: https://blog.csdn.net/wang0112233/article/details/79558612

results matching ""

    No results matching ""