击穿
高并发请求打在某个key上,但是这个key正好失效了,导致流量把数据库压挂了。
有些文章说把key设置为不过期,这是有问题的,因为内存会不够用。
解决:
1、加入有1000个请求get key,获取为nil
2、通过setNX,只让一个请求穿过去DB,其它sleep
问题1: 如果穿过去的请求挂了怎么办? 会死锁
设置锁的过期时间
问题2: 没挂,但是锁超时了 -> 如果数据库一直没处理,请求就会越积越多
用多线程
一个线程取DB
一个线程监控是否取回来。更新锁时间
穿透
查询的是系统根本不存在的数据
使用布隆过滤器
问题:不能删除
解决:布谷鸟 / 返回空
雪崩
大量的key同时失效
可能场景:0点数据失效。要更换数据
解决:强依赖与击穿
业务层加判断,0点数据延时
