范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

手写redis分布式锁(一)

  实现分布式锁时需要实现的两个基本方法:
  1、获取锁//添加锁,利用setnx的互斥性 setnx lock thread1
  2、释放锁//释放锁,删除即可 del lock
  以上获取锁和释放锁有一个bug,就是当一个线程获取到锁的时候,这个时候redis服务器突然宕机了,还没有来得及释放锁,那么lock这把锁就会一直存在内存中了。所有线程都不能再获取到这把锁;
  所以我们要对lock加一个超时时间//带超时时间的锁 set lock thread nx ex 10
  以下是具体代码实现:/** *			1、线程如果获取不到锁,直接返回false,不会等待 */ @SpringBootTest class RedisTestApplicationTests {      @Autowired     private StringRedisTemplate stringRedisTemplate;      //锁的前缀     private static final String PREFIX_LOCK = "lock:";      //锁的名字(这里应该通过参数传递进来,测试我们可以固定一个值就行)     private String lockName = "orderId";      @Test     void lock() {         //获取当前线程的标识id,将id作为值         long id = Thread.currentThread().getId();         Boolean success = stringRedisTemplate.opsForValue().setIfAbsent(                 PREFIX_LOCK + lockName, id + "", 20, TimeUnit.SECONDS);         System.out.println(success);     }  	  @Test     void unlock() {         stringRedisTemplate.delete(PREFIX_LOCK + lockName);     }  }
  以上是最简单的一个分布式锁,但是还有很多缺陷,我们先说第一个缺陷;
  1、会存在误删导致线程并发的问题,以下是具体分析过程1、3个线程同时竞争一把锁,线程1先获取到锁,并设置锁的有效期为10秒钟;
  2、线程1由于网络原因,10秒钟还没有执行完代码,这个时候10秒钟时间已经到了,redis自动将这把锁给删除掉;
  3、锁被删除了,线程2和线程3立马竞争这把锁,假设线程2获取到这把锁,这个时候就有两个线程同时执行了(线程1和线程2),这个时候线程1执行完了,又会去删除这把锁;
  4、那么线程3就会获取锁,又进入到方法里面,这个时候线程2和线程3又发生了并发;
  针对以上情况,我们发现在删除锁的时候,一定要判断一下当前的锁,是不是当前线程加的锁,所以我们对释放锁的代码进行修改  @SpringBootTest class RedisTestApplicationTests {      @Autowired     private StringRedisTemplate stringRedisTemplate;      //锁的前缀     private static final String PREFIX_LOCK = "lock:";      //锁的前缀(这里应该通过参数传递进来,测试我们可以固定一个值就行)     private String lockName = "orderId";      //为了防止多个JVM线程id重复问题,这里加入UUID作为区分     private static final String ID_PREFIX = UUID.randomUUID().toString() + "-";      @Test     void contextLoads() {         //获取当前线程的标识id         long id = Thread.currentThread().getId();         Boolean success = stringRedisTemplate.opsForValue().setIfAbsent(                 PREFIX_LOCK + lockName, ID_PREFIX + id, 20, TimeUnit.SECONDS);         System.out.println(success);     }      @Test     void unlock() {         //获取当前线程标识和UUID         String threadid = ID_PREFIX + Thread.currentThread().getId();         //获取redis里面锁的值         String redisId = stringRedisTemplate.opsForValue().get(PREFIX_LOCK + lockName);         if (threadid.equals(redisId)){             stringRedisTemplate.delete(PREFIX_LOCK + this.lockName);         }     }  }

明确了!今后全国又多了一个节日中华人民共和国医师法3月1日起施行,其中明确规定每年8月19日为中国医师节。明天起,这些新规将影响你我生活!2021年度个人所得税综合所得汇算清缴启动,办理时间为2022年3月1日大通量净水器,为什么这么受追捧?在拥有14亿人口的中国,水是一门大生意。随着人们生活品质的提高,消费者从喝净水升级到用净水,家庭净水需求不断升级,净水器产品逐渐被国内家庭所接受。但是使用过净水器的人一定知道,大多机械转码的学习流程假如想转码,那就抓紧时间学习相关的知识点和技能,至于学习资料你可以去b站找视频看或者看慕课,可以自己先自学,先不要考虑报班,因为怕自己学了几天,就发现自己不适合搞编程,那就浪费钱了上市即爆款,大通量后期低成本云米净水器小白龙800G值得期待近期农村各地频发净水器营销骗局,很多无良商家通过前期送鸡蛋送锅碗瓢盆,在建立信任后,通过一些无厘头的科学试验,引诱老人购买劣质的净水器,还有一些代理商打着免费送净水器的旗帜,在安装雅虎宣布2月28日起停止中国大陆地区服务(原标题时代的眼泪!雅虎邮箱2月28日起停止在中国大陆服务)近日,雅虎Yahoo发布官方通知邮件称,雅虎邮箱将在2月28日停止中国大陆地区服务,在截止日前用户可登陆下载备份。雅虎邮最高奖励1000万元黑龙江激励科技成果高质量落地转化为激励高校科研院所科技成果在我省高质量落地转化,省政府日前印发黑龙江省激励高校和科研院所科技成果高质量就地转化若干措施。我省将对高校科研院所以转让许可作价入股等形式在省内落地的科技3年将投入10亿!黑龙江这样推进科技强省24日,龙头新闻生活报记者从黑龙江省科技厅了解到,黑龙江省进一步推进科技创新发展若干措施发布,为深入实施创新驱动发展战略,不断提升我省科技创新能力,加快科技强省建设,制定如下措施。吉利的新能源荒与忙正在汽车产业日益恢复的时候,汽车产业的结构正在发生变化,由于政策和环保的转变,正在向新能源逐步迈进。对于中国汽车产业来说,合资汽车和自主汽车在传统燃油车领域的竞争难解难分,主流的世从20元暴涨到2800元,订货周期长达60周!买车,还得看芯情?自年初以来,有多家汽车厂商宣布对旗下产品售价调整。一汽大众的两款新能源车均价将上涨5200元,小鹏汽车上涨超过4000元。蔚来汽车公布的最新售价相比去年也有着一定上涨。汽车芯片短缺兆信科技入选北京市专精特新小巨人榜单,2022年持续进行深度应用探索与精准创新日前,北京市经济和信息化局公示2021年度第二批拟认定北京市专精特新小巨人企业名单,一物一码数字化解决方案服务商兆信股份入选。兆信科技表示,小巨人企业的评定标准包括长期专注于细分市既然单个CPU性能提升有困难,为什么不把主板设计成双CPU的呢?你这个问题我在二十年前就问过别人了,然后他就带我看了他们机房的双路主机,两个370的奔三CPU,当时那一套的价在我们这三线小省会够买一套房的。机智多处理器的性能因为受到总线通道性能
今日区块链资讯1。3月19日消息,美联储卡什卡利赞成最快在下次会议上开始缩表,而缩表速度应该是上次的两倍。2。ClearBank表示,它已经筹集了2。29亿美元,标志着它正在推动国际扩张。与Co每天卖出6。2万台,联想在中国拿下40份额,没有对手近日,知名市场调研机构Canalys公布了2021年4季度中国PC市场销量,以及全年PC市场销量数据。数据显示,4季度国内PC出货量(不含平板)为1650万台,同比增长9,而全年出161TB卖5999,5000mAh电池骁龙8Gen1,努比亚Z40Pro确实良心在如今的国内智能手机市场中,如果一款手机价格已经快要达到6000元,那么这款手机肯定是属于高端旗舰。而在手机市场中价格在6000左右的手机还是比较多的,比如在网友们心中地位比较高的Redmi两款手机发布最高配备5500mAh电池近日,根据多家科技媒体的消息,小米旗下的Redmi手机举办了K50系列新品发布会,正式推出了RedmiK50Pro和RedmiK50,其中RedmiK50Pro搭载联发科天玑900鸿蒙系统初长成,正式拒绝谷歌GMS,华为硬气近日有鸿蒙用户试图为手机安装谷歌GMS的时候却被系统拒绝,显示出华为终于硬气了起来,代表着它的HMS服务已足够完善,应付消费者的日常需求,鸿蒙系统真正具有了与谷歌安卓抗衡的底气。HRedmiNote12Pro曝光,一亿主摄5800毫安大电池,价格仅一千出头前几天的红米K50系列的发布让很多消费者惊叹,性价比真的是太高了,这让大家对即将发布的RedmiNote12系列注入了更多期待。最近网络上曝光了RedmiNote12Pro的相关参经济学人全球头条盒马回应所售鳄鱼被砍后复活,理想CEO称电池涨幅非常离谱,东京电力公司将用福岛核电站处理水养鱼2021年结婚登记创36年新低,广东河南结婚人数最多民政部最新发布的统计季报数据显示,2021年我国结婚登记数据为763。6万对。这是继2019年跌破1000万对2020年跌破90麦芒11入网!配备6000mAh大电池,值得选择吗?麦芒回归电信之后,热度也随之下降,不过仍旧有很多忠实粉丝对麦芒青睐有加,近日网上曝光了一款麦芒系列新机,命名为麦芒11,据悉目前这款新机已经入网,预计不久后便会亮相!根据给出的爆料房地产和互联网的结束,是细分领域的开始目前来说,国内的互联网形势不容乐观。我们的三大电商平台可以说是完全基于国内人口红利,但是人口红利结束之后,互联网企业将去往何方?其实,除了电商型互联网公司和腾讯之外,诸如网易,百度宇宙还存在除光速以外的一个速度限制,这才是人类真正的障碍?宇宙中有超越光速的物质吗?或许有,但我们没有发现,所以光是目前为止宇宙中的速度天花板。人类无数次幻想,当我们能够达到光速,会开启怎样的星际旅途。可是,光速是这么容易就达到的吗?光的苹果ApplePay已在阿根廷和秘鲁推出,即将登陆智利鞭牛士3月19日消息,据9to5Mac报道,今年年初,苹果公司预告ApplePay在阿根廷秘鲁和智利的可用性,称即将到来。现在,苹果的支付系统终于可以在阿根廷和秘鲁地区使用了。据了