城市直播房产教育博客汽车
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

手写redis分布式锁(一)

11月7日 鬼神氏投稿
  实现分布式锁时需要实现的两个基本方法:
  1、获取锁添加锁,利用setnx的互斥性setnxlockthread1
  2、释放锁释放锁,删除即可dellock
  以上获取锁和释放锁有一个bug,就是当一个线程获取到锁的时候,这个时候redis服务器突然宕机了,还没有来得及释放锁,那么lock这把锁就会一直存在内存中了。所有线程都不能再获取到这把锁;
  所以我们要对lock加一个超时时间带超时时间的锁setlockthreadnxex10
  以下是具体代码实现:1、线程如果获取不到锁,直接返回false,不会等待SpringBootTestclassRedisTestApplicationTests{AutowiredprivateStringRedisTemplatestringRedisT锁的前缀privatestaticfinalStringPREFIXLOCKlock:;锁的名字(这里应该通过参数传递进来,测试我们可以固定一个值就行)privateStringlockNameorderId;Testvoidlock(){获取当前线程的标识id,将id作为值longidThread。currentThread()。getId();BooleansuccessstringRedisTemplate。opsForValue()。setIfAbsent(PREFIXLOCKlockName,id,20,TimeUnit。SECONDS);System。out。println(success);}Testvoidunlock(){stringRedisTemplate。delete(PREFIXLOCKlockName);}}
  以上是最简单的一个分布式锁,但是还有很多缺陷,我们先说第一个缺陷;
  1、会存在误删导致线程并发的问题,以下是具体分析过程1、3个线程同时竞争一把锁,线程1先获取到锁,并设置锁的有效期为10秒钟;
  2、线程1由于网络原因,10秒钟还没有执行完代码,这个时候10秒钟时间已经到了,redis自动将这把锁给删除掉;
  3、锁被删除了,线程2和线程3立马竞争这把锁,假设线程2获取到这把锁,这个时候就有两个线程同时执行了(线程1和线程2),这个时候线程1执行完了,又会去删除这把锁;
  4、那么线程3就会获取锁,又进入到方法里面,这个时候线程2和线程3又发生了并发;
  针对以上情况,我们发现在删除锁的时候,一定要判断一下当前的锁,是不是当前线程加的锁,所以我们对释放锁的代码进行修改SpringBootTestclassRedisTestApplicationTests{AutowiredprivateStringRedisTemplatestringRedisT锁的前缀privatestaticfinalStringPREFIXLOCKlock:;锁的前缀(这里应该通过参数传递进来,测试我们可以固定一个值就行)privateStringlockNameorderId;为了防止多个JVM线程id重复问题,这里加入UUID作为区分privatestaticfinalStringIDPREFIXUUID。randomUUID()。toString();TestvoidcontextLoads(){获取当前线程的标识idlongidThread。currentThread()。getId();BooleansuccessstringRedisTemplate。opsForValue()。setIfAbsent(PREFIXLOCKlockName,IDPREFIXid,20,TimeUnit。SECONDS);System。out。println(success);}Testvoidunlock(){获取当前线程标识和UUIDStringthreadidIDPREFIXThread。currentThread()。getId();获取redis里面锁的值StringredisIdstringRedisTemplate。opsForValue()。get(PREFIXLOCKlockName);if(threadid。equals(redisId)){stringRedisTemplate。delete(PREFIXLOCKthis。lockName);}}}
搜索 投诉 评论 转载

强化学习周刊第29期Atari深度强化学习和金融强化学习进展关于周刊强化学习作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注。为帮助研究与工程人员了解该领域的相关进展和资讯,智源社区结合领域内容,撰写为第29期《强化……数字人民币的那些事2008年11月1日,一个自称中本聪(SatoshiNakamoto)的人在P2Pfoundation网站上发布了Bitcoin白皮书《Bitcoin:一种点对点的电子现金系统……创造性模仿不是人云亦云,而是超越和再创造莱维特法则说起苹果公司,大家首先会想到什么?是苹果手机,还是乔布斯?我首先想到的是创造。曾经有很多人批评乔布斯,说苹果其实是模仿,因为它所有的产品iPod、iPhone、……滴滴下架100天后,北上广的年轻人,用什么APP打车?燃次元(ID:chaintruth)原创燃财经出品作者谢中秀邓双琳冯晓亭郭一梦张琳赵晨希孔月昕曹杨编辑谢中秀自7月4日滴滴出行APP下架至今,正好……149官网买苹果12充电头是不是ZS税?用完这款后我有了结论作为手机界的标杆,Apple2020年推出iphone12,最大的瓜却不是手机本身有多惊艳,而是打着环保口号让消费者掏钱再买一个充电器。不过说到充电这事吧,相比于国内各手……让用户更安心!派送消杀,保障末端服务安全为了让每一位商家和客户寄递更放心,韵达对每一票快件进行全链路、全流程消杀,确保每一票快件安全及时送达客户手中。而做好末端派送快件的消杀工作就是其中的一环。派送消杀,不仅关……手写redis分布式锁(一)实现分布式锁时需要实现的两个基本方法:1、获取锁添加锁,利用setnx的互斥性setnxlockthread12、释放锁释放锁,删除即可dellock以上获取……阿里健康联合众安推出癫痫保百万医疗险,最高300万元保障癫痫是神经内科最常见的疾病之一,发作时严重影响患者身心健康和生活质量。中国癫痫发病率约为7,癫痫患者有900万左右,其中约有23没有得到规范化治疗。绝大部分健康险产品不支持癫痫……工信部出手,预装APP这门生意要到头了得益于以小米为代表的国内手机厂商在过去十余年间的努力,如今智能手机的渗透率已经达到了高点,人手一部手机也成为了现实,并且很多朋友应该也都用过不止一部智能手机了。但相信很多人都遇……闲鱼上买手机闲鱼上买手机是完全可以的,如果自己对品质什么不放心,完全可以走验机路线啊,掏一点点费用,也不贵,通过闲鱼的验机平台,如果检验报告没有问题,那就可以放心购买了啊,好多卖家不愿意走……数字货币的潜力翻倍股(附名单)1、新开普现价:17。00,总市值:73。32亿,流通市值:61。69亿,2021年三季度:0。07主营业务:智能一卡通系统的软件及各种智能终端的研发、生产、集成、……我们输了联想,还是赢了联想?人民输了联想的过去,将赢得联想的未来。正义不会缺席,贪腐必将严惩!杨柳不倒,联想必死。已经不是老百姓期望的联想,联想也瞧不起老百姓的,只有让中国所谓的精英层,统治阶……
两部门支持新能源电力能建尽建能并尽并能发尽发20年后手机能否被取代?华为概念发布会开始,新手机,一亿像素5000大电池144hz为什么很多网约车司机不能接受别人对他们的批评?建造北京城市副中心最大EPC工程用了哪些黑科技?3月1日币圈头条最新崩盘跑路和即将出事的平台唯品会大牌便宜谜底被揭晓,圈内人士透露,两个门道不容小觑真香机?iPhoneSE3跌破2900元!售价一降再降,库克安卓微信8。0。21内测版上线,还不快来更新奇怪的电脑问题,搞了一天华为智慧屏V98,一机多用解锁多种体验20公里掉电50公里,河南气温大降新能源车遇到过冬难题
苏霍姆林斯基的名言集锦对拜鬼者说爱国诗歌嘲笑14亿人一天的排泄物有多少?生产出来的排泄物,都被排到哪里了消化饼干的家常做法又被这些互联网营销玩坏了油性皮肤多吃什么食物可以改善友情依旧小学作文备孕可以吃白菜吗爱情存折家庭炖牛腩怎么做热文聚热点网 现在新西兰兔价格多少钱一只?2019年新西兰兔价格走势如何?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁