笔记速览:使用缓存遇到的问题及解决方式

在项目中使用缓存的案例

关联维表 :本地缓存,自定义Map的软/弱引用
flink + kafka 实现 Exactly-once 语义 : 分布式缓存,基于redis实现

1. 使用缓存遇到的问题

1.1 缓存雪崩

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

解决方式

  1. (事前)使用集群缓存,保证缓存服务的高可用

    如使用 Redis,可以使用 主从+哨兵 ,Redis Cluster 来避免 Redis 全盘崩溃

  2. (事中)ehcache本地缓存 + Hystrix限流&降级,避免MySQL被打死

  3. (事后)开启Redis持久化机制,尽快恢复缓存集群

1.2 缓存穿透

查询不存在数据

解决方式

  1. 缓存空值,为这些key对应的值设置为null 丢到缓存里面去,后面再出现查询这个key的请求的时候,直接返回null 。
  2. BloomFilter

1.3. 缓存击穿

大量的请求同时查询一个 key 时,此时这个key正好失效了,就会导致大量的请求都打到数据库上面去

解决方式

多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个 互斥锁来锁住它。

等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就直接走缓存。

1.4 热点数据集中失效

热点数据缓存失效以后,会存在大量的请求过来,然后打到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值