缓存击穿,缓存穿透,缓存雪崩

缓存击穿:某个key在某个时间刚好失效。

解决缓存击穿思路:首先加锁,限制所有的请求怼到数据库,(加分布式锁)JVM里的锁机制去实现。

限流:hystrix   、nginx

做分布式锁的解决方案:

redis、redission、zookeeper

 

缓存穿透:大量的访问缓存当中不存在的key

如何解决缓存穿透:

海量数据场景中,如何判断缓存中的key是否存在?

 场景一:网页爬虫对UR地址去重,避免爬取相同的URL地址(全球将近6亿网站)。

 场景二:反垃圾邮件,从数十亿个(约60亿)垃圾邮件列表中判断某邮箱是否垃圾邮箱。

核心问题点:在于快读判断一个数据是否在海量数据当中存在

解决缓存穿透的方案:

布隆过滤器:能够快速的判断一个元素是否在一个集合,其核心是一个超大的二进制向量(位数组)和几个哈希函数实现快速定位,是一个空间效率,查询效率很高的概率型算法。

缺点:1.有一定的误判率   2.数组删除困难

布隆过滤器实现:Google的guava包版本>19

 

误差率产生的原因:哈希碰撞。向量的长度越长,误差率越小。

布隆过滤器原理(自行百度)

缓存雪崩:大量的key缓存集中在某一个时间段失效,造成所有的请求Load到DB,给DB带来巨大的压力,甚至可能造成DB服务挂掉

怎么避免?

1.不同的key设置不同的过期时间,让缓存失效时间尽量均衡。

2.通过加锁请求Load到DB的数量,同一时刻只允许一个请求数据库写缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值