缓存

缓存 #

热点数据集中失效问题

  • 设置不同的失效时间
  • 互斥锁

缓存穿透 #

查询不存在的数据

  • 布隆过滤器
  • 把这个空结果进行缓存。

缓存雪崩 #

当某一时刻发生大规模的缓存失效的情况,比如你的缓存服务宕机了,会有大量的请求进来直接打到 DB 上面。结果就是 DB 称不住,挂掉。

解决 #

  • 事前:使用集群缓存,保证缓存服务的高可用
  • 事中:ehcache 本地缓存 + Hystrix 限流 & 降级,避免 MySQL 被打死
  • 事后:开启 Redis 持久化机制,尽快恢复缓存集群

参考:


缓存击穿 #

在平常高并发的系统中,大量的请求同时查询一个 key 时,此时这个 key 正好失效了, 就会导致大量的请求都打到数据库上面去。

缓存击穿实际上是缓存雪崩的一个特例

解决 #

问题是多个线程同时去查询数据库的这条数据, 我们可以在第一个查询数据的请求上使用一个互斥锁来锁住它。 其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。 后面的线程进来发现已经有缓存了,就直接走缓存。


本文访问量

本站总访问量

本站总访客数