1.缓存雪崩:redis缓存数据库中,同一时刻大量缓存key失效,造成,大量用户请求,直接访问数据库(DB),造成数据库无法支撑(如图1)
缓存雪崩解决方案:
1.设置缓存时间,不要再同一时间失效,随机初始化过期时间
2.redis热点的key 分别在不同节点上
3.不设置过期时间(比较暴力)
4.写个定时任务刷新缓存,3小时过期,在key失效前,更新key
5.使用布隆过滤器或布谷鸟过滤器(推荐)
2.缓存穿透:恶意用户或黑客,使用数据库或redis数据库中没有字段进行查询,造成redis中没有数据,直接查询数据库,大量数据库查询造成数据库宕机
缓存穿透解决方案:
1. 无论查询db数据库是否有数据(为空值时),都会写入redis中
2. ip禁用
3. 前后端进行合法性数据校验,不符合条件,直接return
4. 使用布隆过滤器(较好)
3缓存击穿:突然热点key失效,一瞬间大量用户请求key直接打到数据库上,造成数据库宕机
缓存穿透解决方案:
1. 不过期
2. 集群使用分布式锁,如果单体架构使用互斥锁,(在请求数据库时添加锁)最优 redis分布式锁或使用zookeeper