首页 > 其他分享 >高并发下的缓存雪崩

高并发下的缓存雪崩

时间:2023-06-26 22:26:36浏览次数:45  
标签:缓存 过期 并发 时间 雪崩 key

高并发下的缓存雪崩

什么是缓存雪崩

  缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。

  造成缓存雪崩问题的原因是是大量key拥有了相同的过期时间,比如对课程信息设置缓存过期时间为10分钟,在大量请求同时查询大量的课程信息时,此时就会有大量的课程存在相同的过期时间,一旦失效将同时失效,造成雪崩问题。

如何解决缓存雪崩

  1. 使用同步锁控制查询数据库的线程
synchronized(obj){
 //查询数据库
 //存入缓存
}
  1. 对同一类型信息的key设置不同的过期时间

  通常对一类信息的key设置的过期时间是相同的,这里可以在原有固定时间的基础上加上一个随机时间使它们的过期时间都不相同。

 //设置过期时间300秒
 redisTemplate.opsForValue().set("course:" + courseId, JSON.toJSONString(coursePublish),300+new Random().nextInt(100), TimeUnit.SECONDS);
  1. 缓存预热

  不用等到请求到来再去查询数据库存入缓存,可以提前将数据存入缓存。使用缓存预热机制通常有专门的后台程序去将数据库的数据同步到缓存。

标签:缓存,过期,并发,时间,雪崩,key
From: https://www.cnblogs.com/miaoyindian/p/17506839.html

相关文章

  • 如何提高服务的并发性能?
    一、应用层面读写分离、缓存、ES、线程池、多线程、队列、集群、令牌、系统拆分、隔离、系统升级(可水平扩容方向)、限流、页面静态化。1、页面静态化通过Freemarker对页面进行静态化,减少用户与服务器端的交互。二、时间换空间降低单次请求时间,这样在单位时间内系统并发就会提......
  • 因并发而生,因云计算而热
    因并发而生,因云计算而热2008年11月17日,51CTO联合人民邮电出版社图灵公司邀请了《Erlang程序设计》一书的译者赵东炜老师和在Erlang开发方面有着丰富经验的成立涛老师作客51CTO聊天室,就Erlang程序设计语言和云计算方面的话题与网友进行了深入交流。 本次聊天活动......
  • 缓存与DB数据一致性问题解决的几个思路
    使用缓存必然会碰到缓存跟真实数据不一致的问题,虽然我们会在数据发生变化时通知缓存,但是这个延迟时间内必然会导致数据不一致,如何解决一般有下面几个思路:首先,当这个延迟如果在业务上时可以接受的,比如文章阅读、评论次数这样的缓存数据,这样的问题这里不考虑。 类似数据库分布式事务......
  • MyBatis 缓存
     MyBatis一级缓存1一级缓存原理在一次SqlSession中(数据库会话),程序执行多次查询,且查询条件完全相同,多次查询之间程序没有其他增删改操作,则第二次及后面的查询可以从缓存中获取数据,避免走数据库。 每个SqlSession中持有了Executor,每个Executor中有一个LocalCache。当用......
  • Go学习圣经:Go语言实现高并发CRUD业务开发
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • 2023-06-25:redis中什么是缓存穿透?该如何解决?
    2023-06-25:redis中什么是缓存穿透?该如何解决?答案2023-06-25:缓存穿透缓存穿透指的是查询一个根本不存在的数据,在这种情况下,无论是缓存层还是存储层都无法命中。因此,每次请求都需要访问数据库,这将导致不存在的数据每次都需要查询存储层,这样缓存就失去了保护后端存储的作用。缓存穿透......
  • 2023-06-25:redis中什么是缓存穿透?该如何解决?
    2023-06-25:redis中什么是缓存穿透?该如何解决?答案2023-06-25:缓存穿透缓存穿透指的是查询一个根本不存在的数据,在这种情况下,无论是缓存层还是存储层都无法命中。因此,每次请求都需要访问数据库,这将导致不存在的数据每次都需要查询存储层,这样缓存就失去了保护后端存储的作用。缓存......
  • Spring三级缓存与循环依赖
    三级缓存//一级缓存,存放的是完整的beanprivatefinalMap<String,Object>singletonObjects=newConcurrentHashMap<>(256);//二级缓存,存放的是半成品的bean,未完成属性注入privatefinalMap<String,Object>earlySingletonObjects=newHashMap<>(16);//三级缓存,存放的......
  • 记录--强制缓存这么暴力,为什么不使用协商缓存
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前段时间在看面经的时候,发现很多份面经中都被问到了强缓存和协商缓存。因此我觉得有必要写一篇文章来好好聊聊这两者。强缓存和协商缓存浏览器缓存是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问......
  • Java并发-理论基础
    作用众所周知,CPU、内存、I/O设备的速度是有极大差异的,为了合理利用CPU的高性能,平衡这三者的速度差异,计算机体系结构、操作系统、编译程序都做出了贡献,主要体现为:CPU增加了缓存,以均衡与内存的速度差异;//导致可见性问题操作系统增加了进程、线程,以分时复用CPU,进而均衡CPU与......