缓存穿透
缓存穿透是指查询一个一定不存在的数据,由于缓存不命中就会查询DB,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。
解决方案
1.隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
2.如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。
缓存雪崩
缓存在某一时刻同时失效(多个key),请求全部转发到DB,DB瞬时压力过大造成缓存雪崩。
每个key都需要访问的时候合在一起就对DB造成了很大的压力。
缓存击穿
热点数据一个key失效导致大量请求,请求全部转发到DB,DB瞬时压力过大造成缓存雪崩。
解决方案
1.使用互斥锁,再大量的请求导致缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作,比如Redis的SETNX。只有拿到值的时候再返回,不用查询DB。
网友评论