缓存 #
热点数据集中失效问题
- 设置不同的失效时间
- 互斥锁
缓存穿透 #
查询不存在的数据
- 布隆过滤器
- 把这个空结果进行缓存。
缓存雪崩 #
当某一时刻发生大规模的缓存失效的情况,比如你的缓存服务宕机了,会有大量的请求进来直接打到 DB 上面。结果就是 DB 称不住,挂掉。
解决 #
- 事前:使用集群缓存,保证缓存服务的高可用
- 事中:
ehcache
本地缓存 +Hystrix
限流 & 降级,避免 MySQL 被打死 - 事后:开启 Redis 持久化机制,尽快恢复缓存集群
参考:
缓存击穿 #
在平常高并发的系统中,大量的请求同时查询一个 key 时,此时这个 key 正好失效了, 就会导致大量的请求都打到数据库上面去。
缓存击穿实际上是缓存雪崩的一个特例
解决 #
问题是多个线程同时去查询数据库的这条数据, 我们可以在第一个查询数据的请求上使用一个互斥锁来锁住它。 其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。 后面的线程进来发现已经有缓存了,就直接走缓存。
叶王 © 2013-2024 版权所有。如果本文档对你有所帮助,可以请作者喝饮料。