www.2003.com:对缓存穿透、缓存并发和缓存雪崩的

2019-05-29 作者:计算机教程   |   浏览(88)

缓存雪崩:通常的解决办法是对不同的数据使用不同的失效时间,就会避免缓存雪崩。

欢迎工作一到五年的Java工程师朋友们加入Java架构开发:643694753

 

与分布式锁类似,我们通过本地锁的方式来限制只有一个线程去数据库中查询数据,而其他线程只需等待,等前面的线程查询到数据后再访问缓存。但是,这种方法只能限制一个服务节点只有一个线程去数据库中查询,如果一个服务有多个节点,则还会有多个数据库查询操作,也就是说在节点数量较多的情况下并没有完全解决缓存并发的问题。

定义:

缓存雪崩指缓存服务器重启或者大量缓存集中在某一个时间段内失效,给后端数据库造成瞬时的负载升高的压力,甚至压垮数据库的情况。

缓存并发通常是缓存key过期时,多请求查询数据库,回写缓存,导致性能降低

软过期

一直想过来总结下,总是拖着,今天就给整写了。

2 缓存并发

 

缓存并发的问题通常发生在高并发的场景下,当一个缓存key过期时,因为访问这个缓存key的请求量较大,多个请求同时发现缓存过期,因此多个请求会同时访问数据库来查询最新数据,并且回写缓存,这样会造成应用和数据库的负载增加,性能降低,由于并发较高,甚至会导致数据库被压死。

缓存并发:加锁。分布式锁,本地锁,软过期。这三种都可以。首推软过期。

0 题记

 

使用分布式锁,保证对于每个key同时只有一个线程去查询后端服务,其他线程没有获得分布式锁的权限,因此只需要等待即可。这种方式将高并发的压力转移到了分布式锁,因此对分布式锁的考验很大。

 

缓存穿透指的是使用不存在的key进行大量的高并发查询,这导致缓存无法命中,每次请求都要穿透到后端数据库系统进行查询,使数据库压力过大,甚至使数据库服务被压死。

缓存雪崩通常缓存服务器重启或者大量缓存集中失效,致使数据库访问加大,甚至压垮数据库。

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

 

缓存穿透通常是由恶意攻击或者无意造成的;缓存并发是由设计不足造成的;缓存雪崩是由缓存同时失效造成的,三种问题都比较典型,也是难以防范和解决的。本节给出通用的解决方案,以供在缓存设计的过程中参考和使用。

本文由www.2003.com发布于计算机教程,转载请注明出处:www.2003.com:对缓存穿透、缓存并发和缓存雪崩的

关键词: