长宁做手机网站建设,济宁网站建设的公司,网站seo诊断分析和优化方案,优化快速排名教程提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 缓存穿透 击穿 雪崩运行速度:1 缓存穿透问题描述:如何解决: 2 缓存击穿问题描述:如何解决: 3 缓存雪崩说明:解决方案: 缓存穿透 击穿 雪崩
问题描述: 由于海量的用… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 缓存穿透 击穿 雪崩运行速度:1 缓存穿透问题描述:如何解决: 2 缓存击穿问题描述:如何解决: 3 缓存雪崩说明:解决方案: 缓存穿透 击穿 雪崩
问题描述: 由于海量的用户的请求 如果这时redis服务器出现问题 则可能导致整个系统崩溃.
运行速度:
tomcat服务器 150-250 之间 JVM调优 1000/秒NGINX 3-5万/秒REDIS 读 11.2万/秒 写 8.6万/秒 平均 10万/秒
1 缓存穿透
问题描述:
由于用户高并发环境下访问 数据库中不存在的数据时 ,容易导致缓存穿透.
缓存击穿是指一个Key非常热点在不停的扛着大并发大并发集中对这一个点进行访问当这个Key在失效的瞬间持续的大并发就穿破缓存直接请求数据库就像在一个完好无损的桶上凿开了一个洞。
缓存击穿的话设置热点数据永远不过期。或者加上互斥锁就能搞定了。
如何解决:
热点数据永不过期使用互斥锁
业界比较常用的做法是使用mutex。简单地来说就是在缓存失效的时候判断拿出来的值为空不是立即去load db而是先使用缓存工具的某些带成功操作返回值的操作比如Redis的SETNX去set一个mutex key当操作返回成功时再进行load db的操作并回设缓存否则就重试整个get缓存的方法。
伪代码如下图 SETNX是「SET if Not eXists」的缩写也就是只有不存在的时候才设置可以利用它来实现锁的效果 2 缓存击穿 量太大缓存过期 问题描述:
由于用户高并发环境下, 由于某个数据之前存在于内存中,但是由于特殊原因(数据超时/数据意外删除)导致redis缓存失效. 而使大量的用户的请求直接访问数据库. 俗语: 趁他病 要他命
如何解决:
1. 设定超时时间时 不要设定相同的时间. 2. 热点数据永不过期 3. 设定多级缓存 4.缓存空对象 当存储层不命中到数据库查发现也没有命中那么仍然将空对象保留到缓存层中之后再访问这个数据将会从缓存中获取,这样就保护了后端数据源。不过空值做了缓存意味着缓存层中存了更多的键需要更多的内存空间(如果是攻击问题更严重),比较有效的方法是针对这类数据设置一个较短的过期时间让其自动剔除。 5. 使用布隆过滤器 3 缓存雪崩 缓存雪崩是指在某一个时间段缓存集中过期失效或者Redis宕机 说明:
由于高并发条件下 有大量的数据失效.导致redis的命中率太低.而使得用户直接访问数据库(服务器)导致奔溃,称之为缓存雪崩.
缓存雪崩:由于缓存层承载着大量请求,有效地保护了存储层,但是如果缓存层由于某些原因不能提供服务比如同一时间缓存数据大面积失效那一瞬间Redis跟没有一样于是所有的请求都会达到存储层存储层的调用量会暴增造成存储层也会级联宕机的情况。
解决方案:
保证缓存层服务高可用性不要设定相同的超时时间 随机数 热点数据永不过期提高redis缓存的命中率 调整redis内存优化策略 采用LRU等算法.微软服务机制 API网关实现. SpringCloudGateway 网关 限流 降级 熔断数据预热设定多级缓存.配置布隆过滤器