击穿
在**高并发**请求下,key过期或者LRU,LFU进行了清除。导致大量请求并发访问数据库
阻止并发到数据库
1,get key 获得key
2,setnx 设置锁
3-1,ok,去 DB 获取到锁,去数据库查
3-2,false,sleep -> 1 没有获取到锁,休眠一段时间,重复一步骤。或者设置key存在后直接返回
zookeeper
穿透
从业务接收查询的是数据库中根本不存在的数据
布隆过滤器,位图存储是否存在数据,存在就去查库(有小于1%穿透可能),不存在就直接返回。但是不能删除,可以使用布谷鸟过滤器。或者设置空key,直接返回,不到达布隆
雪崩
大量的key同时失效,间接造成大量的访问到达DB
时点性无关,使用随机过期时间
否则在零点进行大批量失效后,业务层延时零点,在数据换血后,进行访问。或者强依赖击穿方案,设置锁,获取到锁,查库,设置值。