04-Redis进阶,雪崩,击穿,穿透
什么是Redis雪崩?怎么解决?
热点数据会做缓存(首页数据),一般缓存都是定时任务刷新,或者是查不到的时候去更新缓存,定时任务刷新就会有一个问题。
例子:假如首页key失效时间为12小时,中午12点刷新数据,刚好有个热点活动,用户大量涌入,缓存key全部都失效了,此时数据查询全部落在数据库,数据库可能直接挂掉。重启数据库后又会直接挂掉。这就是缓存雪崩的现象。
缓存雪崩是大面积的key失效。或者缓存挂掉了。
- 缓存机上随机数
setRedis(Key,value,time + Math.random() * 10000);
- 缓存不过期,更新缓存。
- 主从模式和集群模式保证缓存的高可用
redis缓存穿透?怎么解决?
缓存穿透是指缓存和数据库中都不存在数据,用户不断发起请求,数据库id一般为1开始自增的,如果发起id为-1的查询或者id特别大的不存在的数据。用户很可能是故意的攻击者,这样会造成数据库压力过大,严重的情况下回击垮数据库。
- 接口增加参数检验,不合法的参数直接return。
- 缓存和数据库都没有取到的数据可以将key的value写为null,位置错误,稍后重试等,按场景进行设置。缓存有效时间可以适当设置短一点,30秒,避免造成正常数据无法访问。可能存储很多无效的数据
- ip单位时间访问次数限制,拉黑。
- BloomFilter 过滤器
接口参数必须校验,分页最大值必选做控制max。
redis缓存击穿?怎么解决?
缓存击穿是一个key非常热点,在不停扛着大并发,大并发集中在这一个key进行访问。当key失效的瞬间,持续的大并发会穿破缓存,直接请求数据库。就好像在一个桶上凿开一个洞。
- 热点数据永不过期
- 加锁,获取数据加入缓存
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。