![基于redis方式实现分布式锁_第1页](http://file4.renrendoc.com/view11/M01/31/32/wKhkGWWlfOiAMuR0AAGjLxzuMbU608.jpg)
![基于redis方式实现分布式锁_第2页](http://file4.renrendoc.com/view11/M01/31/32/wKhkGWWlfOiAMuR0AAGjLxzuMbU6082.jpg)
![基于redis方式实现分布式锁_第3页](http://file4.renrendoc.com/view11/M01/31/32/wKhkGWWlfOiAMuR0AAGjLxzuMbU6083.jpg)
![基于redis方式实现分布式锁_第4页](http://file4.renrendoc.com/view11/M01/31/32/wKhkGWWlfOiAMuR0AAGjLxzuMbU6084.jpg)
![基于redis方式实现分布式锁_第5页](http://file4.renrendoc.com/view11/M01/31/32/wKhkGWWlfOiAMuR0AAGjLxzuMbU6085.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Redis的分布式分布式锁一般有三种实现方Redis的分布式分布式锁一般有三种实现方ZooKeeper的分布式基于关系数据库乐观基于关系数据库实现分布式锁主要利用数据库的锁机制,通常使用乐观锁。但是由于并发场景下RDBMS的IO开销太大,所以一般不适用与大型、高并发项目ZooKeeper基于ooeper临时有序节点实现的分布式锁,其大致思想为:每个客户端获取锁时,在ookeperzkhpblo.csdnne/heopcRedis的分布式本篇主要介绍使用redis构建分布式锁服redis实现分布式锁主要Redissetnx命SETNXkeyvalrediskey不存在时,setkeyvalkey存在,则什么都不做,返回0expirekeykeysecondredis会自动删除该键值对,即锁rediskey,即释放在使用Redisrediskey,即释放在使用Redis实现分布式锁的时候,主要就会使用到这三个命令1、获取锁的时候setnx加锁,并使expire命令为锁添加一个超时时间,超过该时间则自动释放锁,锁的value值需要指定,可以根据具有业务含义,本文简化为UUID,在2、获取锁的时候还设置一个获取的超时时间,若超过这个时间则放弃获取锁3、释放锁的时候,通过UUID判断是不是该锁,若是该锁,则执行delete进行锁释放Maven依赖信packagecom.zpc.redis.lock;importredis.clients.jedis.Jedis;importjava.util.UUID;publicclassRedisLockprivateJedisPoolpublicRedisLock(JedisPoolprivateJedisPoolpublicRedisLock(JedisPool{this.jedisPool=}*@param@param@parampublicStringlock(StringlockKey,LongacquireTimeout,Long{Jedisconn=StringreturnedLockId=tryconn=StringlockName="redis_lock_"+3.定义上锁成功之后,锁的超时时间intexpireTimeinttimeOutStringlockId=UUID.randomUUID().toString().replaceAll("-",//LongendTime=System.currentTimeMillis()+acquireTimeout;while(System.currentTimeMillis()<endTime){6.使用setnxif(conn.setnx(lockName,lockId)==1)conn.expire(lockName,expireTime);returnreturnedLockId;}//}}catch(Exception{}finallyif(conn!=packageimportcom.zpc.redis.lock.RedisLock;packageimportcom.zpc.redis.lock.RedisLock;import}}return}*publicbooleanreleaseLock(StringlockKey,StringlockId)Jedisconn=null;try{conn=StringlockName="redis_lock_"+3.如果valueredisifflag=true;System.out.println("releaselock:"+}}catch(Exception{}finallyif(conn!={}}return}importpublicclassRedisLockDemoprivatestaticJedisPoolimportpublicclassRedisLockDemoprivatestaticJedisPoolstaticJedisPoolConfigconfig=new//////config.setMaxWaitMillis(1000*//pool=newJedisPool(config,"",6379,}privatestaticRedisLockredisLock=newpublicstaticvoidmain(String[]{for(inti=0;i<50;i++)}}}classThreadRedisextendsThreadprivateRedisLock{this.redisLock=}publicvoidrun()try{identifier=redisLock.lock("foodLock",3000L,1000*60*redis测试,控制redis测试,控制台输出如下,发现超过3s钟获取锁失败Thread-46获取锁成功,id执行业务逻辑releaseThread-46释放锁成功,idThread-40获取锁成功,id执行业务逻辑releaseThread-40释放锁成功,idThread-19获取锁成功,id执行业务逻辑releaseThread-19释放锁成功,idThread-49获取锁成功,idif(StringUtils.isEmpty(identifier))//}System.out.println(Thread.currentThread().getName"获取锁成功,锁ididentifier:Thread.sleep(300);//模拟业务处理耗}catch(Exceptione)}finally//if(!StringUtils.isEmpty(identifier))if(releaseLock){System.out.println(Thread.currentThread().getName"释放锁成功,锁ididentifier:identifier+}}}}}执行业务逻辑release执行业务逻辑releaseThread-49释放锁成功,idThread-13获取锁成功,id执行业务逻辑releaseThread-13释放锁成功,idThread-20获取锁成功,id执行业务逻辑releaseThread-20释放锁成功,idThread-1获取锁成功,id执行业务逻辑releaseThread-1释放锁成功,idThread-22获取锁成功,id执行业务逻辑releaseThread-22释放锁成功,idThread-33获取锁成功,id执行业务逻辑releaseThread-33释放锁成功,idThread-23获取锁成功,id执行业务逻辑releaseThread-23释放锁成功,id都有很大的影响,本文实现的分布式锁只是一种简单的实现,主要学三种分布式对上面几种方式,哪种方式都无法做到完美。正如 定理一样,在复杂性、可用性分区容错性等方面无法同时满足,所以要根据不同的应用场景选择最从理解的难易程度角度(从低到高>>从实现的复>>从实现的复杂性角度(从低到高Zookeeper>=>从性能角度(从高到低>Zookeeper>=从可靠性角度(从高到低Zookeeper>>Redis实现分布式锁Zookeeper实现分布式锁区redis
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- CKD-MBD规范治疗课件
- 商务考试练习测试卷
- 助理企业培训师练习试题及答案
- 底盘综合故障排除练习测试题附答案
- 医疗质量管理培训课件内容
- 初中数学课堂中混合式教学模式的构建
- 《红外气体传感器》课件
- 《带传动张紧装置》课件
- 小狗旺旺的读后感
- 纪录片航拍中国的地理教育评析
- 监护人考试20241208练习试题附答案
- 证券公司装修施工合同工程
- 人教版PEP三年级到六年级单词以及重点句型
- ABB工业机器人应用技术 课件 2.6系统输入输出与IO信号的关联
- 2024-2024年上海市高考英语试题及答案
- 中建总承包项目高支模专项施工方案含计算书
- 学校疫情防控学校传染病疫情及突发公共卫生事件报告制度
- 神经重症患者镇痛镇静中国共识(2023版)
- 山东省济南市2023-2024学年高二上学期期末考试化学试题 附答案
- 2025 年福建省中考语文试题:作文试题及范文
- 短视频运营绩效考核表KPI-企业管理
评论
0/150
提交评论