赞
踩
指在某一个时间段,缓存集中过期失效。所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。
大量key同时过期
过期时间+随机数:尽量让缓存失效的时间均匀分布,最次也得随机分布,尤其是一些访问大的接口。
加锁或者队列:防止大量线程对数据库的一次性进行读写,避免缓存失效时对数据库造成的巨大冲击,但吞吐量就降低了。
指查询一个一定不存在的数据。由于缓存不命中,并且出于容错考虑,如果从数据库查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,缓存失去意义。
黑客攻击,查询数据库中不存在的数据
如果数据库返回信息为null,也可以将这个空对象设置到缓存里边去。下次再请求的时候,就可以从缓 存里边获取了
注意:将空对象设置一个较短的过期时间(因为没有意义,存着就是为了防止黑客高频null攻击)
关键字:bitmap数组、hash算法、误判率
详情见这篇文章:【Redis篇】什么是布隆过滤器?
缓存击穿指的是热点key在某个特殊的场景时间内恰好失效了,恰好有大量并发请求过来了,造成DB压力(屋漏偏逢连夜雨)
其实缓存击穿和缓存雪崩从概念上来讲差不多,只是缓存击穿是某些热点key,而雪崩指的是大规模的key。
热点key过期
对于一些热点key,过期时间可以无限调长
加锁或者队列的方式:和缓存雪崩处理方式意义
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。