当前位置: 首页 > news >正文

免费网站空间哪个好北京做网站制作的公司

免费网站空间哪个好,北京做网站制作的公司,seo课,软件项目管理期末考试在SpringBoot中利用Redis实现互斥锁 基本知识 前提条件#xff0c;有一个能够在Springboot中使用Redis的项目#xff0c;或者能够直接开也行 为什么要实现互斥锁#xff1a;当我们利用Redis存储热点数据时#xff0c;突然就过期失效或者被删除了#xff0c;导致大量请求同…在SpringBoot中利用Redis实现互斥锁 基本知识 前提条件有一个能够在Springboot中使用Redis的项目或者能够直接开也行 为什么要实现互斥锁当我们利用Redis存储热点数据时突然就过期失效或者被删除了导致大量请求同时访问数据库增加了数据库的负载。为减轻数据库的负载我们利用互斥锁。 业务的一个逻辑图流程 核心思路相较于原来从缓存中查询不到数据后直接查询数据库而言现在的方案是 进行查询之后如果从缓存没有查询到数据则进行互斥锁的获取获取互斥锁后判断是否获得到了锁如果没有获得到则休眠过一会再进行尝试直到获取到锁为止这个尝试要重新从Redis再次尝试获取数据可能别的锁已经获取到了才能进行查询 如果获取到了锁的线程再去进行查询查询后将数据写入redis再释放锁返回数据利用互斥锁就能保证只有一个线程去执行操作数据库的逻辑防止缓存击穿 操作锁的核心思路就是利用redis的setnx方法来表示获取锁该方法含义是redis中如果没有这个key则插入成功返回1 具体实现 设置锁删除锁 /*** 根据name对特定的数据进行锁* param name* return*/ public boolean setLock(String name) {return Boolean.TRUE.equals(redisTemplate.opsForValue().setIfAbsent(name, true, 10, TimeUnit.SECONDS)); }public boolean releaseLock(String name) {return Boolean.TRUE.equals(redisTemplate.delete(name)); }具体流程实现 GetMapping(/getOneByLock/{sequence}) public BaseResponseSentences getOneByLock(PathVariable long sequence) {// 从redis中查信息String name test:redis:sentences: sequence;Sentences sentence (Sentences) redisTemplate.opsForValue().get(name);// 命中返回数据if(sentence ! null ){redisTemplate.expire(name,2,TimeUnit.MINUTES);return ResultUtils.success(sentence);}// 未命中获取锁String LOCK_NAME test:redis:lock: sequence;boolean lock redisTemplate.opsForValue().get(LOCK_NAME) ! null (boolean) redisTemplate.opsForValue().get(LOCK_NAME);//如果lock等于false 那么就可以获取到锁并且锁住不许其他人操作if(!lock){return ResultUtils.success(setLockReleaseLockAboutSentence(LOCK_NAME,name,sequence));}// 没有获取到锁 休眠一段时间并且反复检测redis中的数据是否存在或者锁是否释放while(true){try {Thread.sleep(1000);log.error(等待中);} catch (InterruptedException e) {throw new RuntimeException(e);}// 检查是否存在值sentence (Sentences) redisTemplate.opsForValue().get(name);if(sentence ! null){return ResultUtils.success(sentence);}boolean checkAgain (boolean) redisTemplate.opsForValue().get(LOCK_NAME);if(!checkAgain){sentence setLockReleaseLockAboutSentence(LOCK_NAME,name,sequence);}return ResultUtils.success(sentence);} }public Sentences setLockReleaseLockAboutSentence(String LOCK_NAME,String redisName, long sequence){// 设置 锁值 为truesetLock(LOCK_NAME);// 并且从数据中查取数据Sentences sentence sentencesService.getById(sequence);// 这里为了明显不能抢锁设置一个睡眠时间try {log.error(休眠中);Thread.sleep(3000);} catch (InterruptedException e) {throw new RuntimeException(e);} // 把数据写入RedisredisTemplate.opsForValue().set(redisName,sentence,2, TimeUnit.MINUTES);// 释放锁releaseLock(LOCK_NAME);// 返回数据return sentence; }代码说明在这个代码中为了演示明显获取锁中延迟3s竞争锁会延迟1s下面的演示初始时Redis中没有数据只能去数据库中取数据但是设置了互斥锁所以只能够一个线程进入数据库取数据其他只能等待数据得到结果。 结果示意 redis中无数据 结果 最终效果是好的。redis中已存入数据
http://www.dnsts.com.cn/news/125244.html

相关文章:

  • 做阿里巴巴网站需要多少钱如何进行公司网站的建设
  • 免费网站建设无广告为什么公司网站打不开
  • 惠州网站建设电话无网站做cpa推广
  • 电子商务网站建设期末试卷答案淘客推广
  • 网站能看出建设时间吗企业网站的建立要做的准备
  • 做网站开发要安装哪些软件wordpress自定义页面插件
  • 网站推广有哪些优势wordpress中文企业模板
  • 哪些网站可以做企业推广建设俄语网站
  • 学做网站前景近期热点话题
  • 小荷特卖的网站谁做的西安wordpress
  • 百度网址大全百度一下你就知道郑州seo外包v1
  • 重庆平台网站建设设计个人做电梯网站
  • 提供免费建网站的网网站建设管理情况汇报
  • 网站设计怎么做图片透明度dw8做网站步骤图
  • 网站建设购物商城普通网站建设的缺陷
  • 关于加强网站建设工作的意见如何做com的网站
  • 专门做自助游攻略的网站是哪个安徽哪家公司做网站比较好
  • 在公司平台做网站竞拍div网站模板
  • 中山建网站报价免费民事法律咨询
  • 忻州市住房城乡建设局网站wordpress 高亮
  • 牡丹江建设工程信息网站有限公司注册资金
  • 网站后台验证码不正确2345网址大全
  • 旅游网站html5代码陕西公共资源交易中心
  • 广告公司网站设计策划阿里巴巴官网电脑版
  • 网站平台开发报价表怎么做如何屏蔽百度广告推广
  • 免费信息发布网站大全响应式网站企业
  • 网站创建服务公司wordpress旅游类网站模板
  • 国家林业工程建设协会网站电商网站怎么做与众不同
  • 事业单位网站备案项目网址大全
  • 装修平台网站有哪些贵州省冶金建设有限公司网站