概述
1.缓存穿透
1.1缓存穿透的概念
众所周知Redis数据是放在内存里面的,MySQL里的数据是放在磁盘里的访问MySQL需要做的是IO操作,所以我们一般查询数据都是这样的一个流程首先我先查Redis,如果Redis里面有数据直接拿出来就行了,如果没有就去查MySQL同时我把查到的数据写到Redis里面。但是如果黑客写个脚本故意去查Redis没有的东西,比如说我写个死循环里面随机生成一个Redis不可能有的东西,这样就会不断的访问MySQL严重的话会给MySQL打崩。这就是缓存穿透。
1.2如何解决缓存穿透
1.首先我们可以实现对接口api的限流比如说一个接口正常一秒钟可能也就几十次,结果你一秒钟访问了成千上万次那一定是有问题的我们需要对这种接口进行限流。
2.从数据库和Redis都查询不到数据的情况下,将数据库空值写入到缓存中加上短时间的有效期。(只适合单个key,随机生成不同的key就完了)。而且这种方案也可能正常数据的使用。
3.布隆过滤器
2.缓存击穿
2.1缓存击穿的概念
假如说在高并发的情况下,当一个热点key过期的时候,因为访问该key请求过多,多个请求同时发现该缓存key过期,这时候查询数据库,同时将数据库内容都放到我们的redis中,对我们的数据库压力非常的大。
2.2如何解决缓存击穿
1.解铃还须系铃人,造成这种情况的原因是这个key快过期了,然后有多个客户端同时访问造成了这种缓存击穿。所以我们只需要减少客户端访问量并且让这个key不失效就行了。我们能想到的解决方案就是分布式锁,当多个客户端同时想访问的时候,我们不让他们同时访问,只留下一个客户端去查数据库把数据拿回来放到redis当中这样就成功地给这个热点key续命了,然后通知其他的客户端让他们过来拿数据就可以了。
2.对热点key设置无限有效期,或者异步延长时间。
3.缓存雪崩
3.1缓存雪崩的概念
缓存雪崩是指Redis服务器重启没有持久化或者大量key集中失效,突然对我们的数据库压力非常大。
3.2如何解决缓存雪崩
过期时间随机或者设置不一样的过期时间。
综上所述:
- 穿透 key不存在情况下
- 击穿 单个热点key失效在并发查询下的情况
- 雪崩 多个key失效方法
最后
以上就是务实玫瑰为你收集整理的Redis缓存穿透,击穿,雪崩的全部内容,希望文章能够帮你解决Redis缓存穿透,击穿,雪崩所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复