描述:缓存穿透是有些人恶意请求缓存和数据库中都不存在的数据,如果他请求次数非常的频繁,可能会把数据库打挂掉。
解决办法:添加以当前key为键的空对象。
使用布隆过滤器过滤掉空key。
对于这种恶意攻击,可以进行身份核验或者数据合法检验等。
描述:指大量请求去访问缓存中的一个数据,然后这条数据过期了,然后短时间内大量的请求就打到了数据库上面,可能会把数据库给打挂掉。
解决办法:对于热点数据,设置永不过期,定时更新缓存。
使用互斥锁或分布式锁,让一个线程去访问数据库将缓存写进来,其他线程访问缓存。
描述:缓存服务宕机或者缓存同一时间大面积失效,造成大量请求打到了数据库上面,可能将数据库给打挂掉。
解决办法:给缓存的失效时间加上一个随机值,避免同一时间失效。
使用互斥锁,同一个key值只允许一个去访问数据库然后写缓存,其他线程访问缓存。
缓存击穿和缓存雪崩的区别:
击穿是指一条数据过期引发的一系列问题,而雪崩是指多条数据过期引发的一系列问题,数量不一样这俩。