游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

分布式锁及其常见实现方式

  1。什么是分布式锁?
  在分布式系统中,为了保证对数据的修改有最终一致性,通常使用分布式锁或者分布式事务。比如常见的多个系统同时修改商品,既依赖于现有数据也要修改数据,如果没有限制,高并发情况下很可能最终数据是错误的。
  与单机锁不同,分布式锁更加复杂,需要考虑网络延迟、服务阻塞等,通常具有如下特点:同一时间只能有一个线程拥有锁;高可用,获取和释放锁必须可靠;高性能,获取和释放锁必须快速完成;可重入,已获取锁的线程可以再次获取锁而不会发生死锁;过期失效,避免死锁;阻塞(根据业务需要)。2。基于数据库实现分布式锁2。1基于表主键唯一实现分布式锁
  利用数据库主键唯一的特性,可以基于唯一主键保证多次操作只有一次成功。在数据库中创建一个表,表中包含方法名等字段,并在方法名字段上创建唯一索引,想要执行某个方法,就使用这个方法名向表中插入数据,成功插入则获取锁,执行完成后删除对应的行数据释放锁。释放锁时,直接删除数据库记录即可。
  此方案存在的问题是强依赖数据库,容易形成热点,数据库锁表导致的超时会影响性能,或者数据库宕机会导致服务不可用。并且,数据库本身没有失效机制,如果任务崩溃会导致数据库中的锁不能被释放。数据库插入操作本身没有阻塞机制,故无法实现分布式锁的阻塞等待,任务线程可能需要重复尝试插入。由于唯一主键的存在,持有锁的线程也无法重复获得锁,其他线程竞争锁的过程中也无法根据优先级进行分配。2。2基于表字段版本号做分布式锁
  在数据库中为表增加一个版本号字段,每次操作时判断版本号,只有版本号一致才能进行对应的修改,修改后版本号加1,通过CAS的方式进行修改。
  此实现会增加数据库操作的次数,高并发情况下可能性能不好。2。3基于数据库排他锁做分布式锁
  forupdate是一种行级锁,又叫排它锁,一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行。我们可以认为获得排他锁的线程即获得分布式锁,任务执行完成后通过commit来释放锁。forupdate语句会在执行成功后立即返回,在执行失败时一直处于阻塞状态,直到成功。
  注意:InnoDB引擎在加锁的时候,只有通过索引进行检索的时候才会使用行级锁,否则会使用表级锁。这里我们希望使用行级锁,就要给要执行的方法字段名添加索引,值得注意的是,这个索引一定要创建成唯一索引,否则会出现多个重载方法之间无法同时被访问的问题。重载方法的话建议把参数类型也加上。
  但是MySQL会对查询进行优化,即便在条件中使用了索引字段,但是否使用索引来检索数据是由MySQL通过判断不同执行计划的代价来决定的,如果MySQL认为全表扫效率更高,比如对一些很小的表,它就不会使用索引,这种情况下InnoDB将使用表锁,而不是行锁。3。基于Redis实现分布式锁3。1setnx()、expire()方法实现分布式锁
  setnx的含义就是SETifNotExists,主要有两个参数setnx(key,value)。该方法是原子的,如果key不存在,则设置当前key成功,返回1;如果当前key已经存在,则设置当前key失败,返回0。setnx命令不能设置key的超时时间,只能通过expire()来设置。
  锁的实现步骤:调用setnx(lockkey,1)获取锁。如果返回1,则获取锁成功。调用expire()命令对lockkey设置超时时间。执行完业务代码后,通过delete命令删除lockkey。
  这个方案如果在第一步setnx执行成功后,在expire()命令执行成功前,发生了宕机的现象,那么就依然会出现死锁的问题。3。2setnx()、get()、getset()方法实现分布式锁
  这个方案是对上一个方案的优化版本。
  getset()命令主要有两个参数getset(key,newValue)。该方法是原子的,对key设置newValue这个值,并且返回key原来的旧值。假设key原来是不存在的,那么首次执行的返回值是null。
  锁的实现步骤:调用setnx(lockkey,当前时间过期超时时间)获取锁。如果返回1,则获取锁成功。如果返回0,则获取锁失败,进一步调用get方法判断。get(lockkey)获取上次设置的过期时间oldExpireTime。如果oldExpireTime小于当前系统时间,则认为这个锁已经超时,进一步调用getset方法判断。getset(lockkey,newExpireTime当前时间过期超时时间)设置新的过期时间newExpireTime,并返回之前的值currentExpireTime。如果currentExpireTime与oldExpireTime相等,则获取锁成功,不相等则说明锁被其他请求抢走了。执行完业务代码后,要判断下锁有没有超时,如果没有超时通过delete命令删除lockkey,如果超时了则不处理(可能已被抢走)。
  这个方案在任务处理超时或发生宕机时,无需担心锁超时问题,下次请求可以判断出实际上锁已经超时了。4。基于ZooKeeper实现分布式锁
  zookeeper由多个节点构成(单数),采用zab一致性协议。因此可以将zk看成一个单点结构,对其修改数据其内部自动将所有节点数据进行修改而后才提供查询服务。
  zookeeper数据是目录树的形式,每个目录称为znode,znode中可存储数据(一般不超过1M),还可以在其中增加子节点。
  子节点有三种类型。序列化节点,每在该节点下增加一个节点自动给该节点的名称上自增。临时节点,一旦创建这个znode的客户端与服务器失去联系,这个znode也将自动删除。普通节点。
  zookeeper提供了Watch机制,client可以监控每个节点的变化,当产生变化会给client产生一个事件。
  可以利用临时节点与watch机制实现分布式锁。每个锁占用一个普通节点lock,当需要获取锁时在lock目录下创建一个临时节点,创建成功则表示获取锁成功,失败则watchlock节点,有删除操作后再去争锁。临时节点好处在于当进程挂掉后锁的节点自动删除不会发生死锁。
  缺点在于所有取锁失败的进程都监听父节点,很容易发生羊群效应,即当释放锁后所有等待进程一起来创建节点,并发量很大。
  一个可行的优化方案是上锁改为创建临时有序节点,每个上锁的节点均能创建节点成功,只是其序号不同。只有序号最小的可以拥有锁,如果这个节点序号不是最小的则watch序号比本身小的前一个节点(公平锁)。watch事件到来后,再次判断是否序号最小。取锁成功则执行代码,最后释放锁(删除该节点)。
  性能上可能没有缓存服务那么高,因为每次在创建锁和释放锁的过程中,都要动态创建、销毁临时节点来实现锁功能。zookeeper中创建和删除节点只能通过Leader服务器来执行,然后将数据同步到所有的Follower机器上。5。总结
  分布式锁比较复杂,也比较容易发生死锁。目前主流的实现方式包括:基于数据库实现分布式锁。基于Redis实现分布式锁。基于ZooKeeper实现分布式锁。
  分布式锁及其常见实现方式程序之心

寻湿地麋鹿探天下会船游溱潼古镇是的,我是被标题里的内容吸引的你是否见过这样的场景:见过的,或许也只是在电视里,或许是在各种媒体上,不过这照片却是在泰州姜堰溱湖国家湿地公园里拍的,瞬间就被吸引了。……三星S20系列国行版于2月27日开售顶配版五位数起步2月12日,三星在美国洛杉矶正式发布了S20、S20、S20Ultra三款手机,在配置方面不负众望领先现有高端手机一年以上。均标配了骁龙865芯片,部分地区的版本则搭载猎户座9……江西九江丢了江州区这一名称可惜了江州,地名。中国多个省市地区不管是现在还是过去都有叫江州这个地名。例如江西省九江市在晋朝时就叫做江州;重庆在古代三国时期也曾叫做江州;广西壮族自治区崇左市也有个叫江州区的地方。……金秋长安之约奇安信亮相2021国家网络安全宣传周金秋长安之约奇安信亮相2021国家网络安全宣传周金秋长安,网安国安。10月8日,2021年国家网络安全宣传周网络安全博览会在西安召开,奇安信携冬奥网络安全运行指挥中心系统……测评便宜够用还是高规更好?耕升两款RTX2060对比测评便宜够用还是高规更好?耕升两款RTX2060对比前面两篇文已经对耕升GEFORCERTX2060追风和耕升GEFORCERTX2060G魂OC分别进行了一个简单的开箱和性……洛克希德马丁的秘密舰载小型核聚变(上)编者按:前次介绍两家美国小型核聚变初创企业,今次介绍一家美国世界五百强企业洛克希德马丁的小型核聚变研究。洛克希德马丁打开洛克希德马丁(LockheedMartin)……燕窝事件之后,辛巴好像就再也站不起来了9月2日,有粉丝打开辛有志快手账号主页面发现,辛巴直播间又一次被封禁了!直播封禁说明显示,该用户将于9月8日解封,平台方就这一次封禁的原因,并未发出任何公告,但猜测与辛有志之前……这个膜也太好用了!小米11pro11ultra手机保护膜贴膜真的吹爆这家钢化膜,贴上跟原屏幕一样,屏幕完全清楚!!!卖家说是量子UV膜!虽然我不懂但使用感受给五星好评!耐摔,摸着很轻滑、手感不错!!!最重要几乎不沾指纹……从一位工程师离职,能间接看出部门领导的人品白苏说文上个礼拜五,在部门工作了三年的一位机械工程师辞职了,我感觉挺遗憾的,为了兼顾女朋友的生活,本来他是想要内调到另外一个工作岗位上的,期间找领导谈了6次,但领导依旧没……手机有必要戴套吗?如今的智能手机,可以说是越来越贵了。不像刚开始的时候,还是苹果、三星等国外巨头的天下。现在的国产品牌都起来了,不会比国外品牌差多少了,所以价格自然也上来了,像华为六七千的手机都……税务总局公布六起打击三假违法行为典型案例为维护经济税收秩序,依法严厉打击没有实际经营业务只为虚开发票的假企业、没有实际出口只为骗取退税的假出口、没有具备条件只为骗取疫情防控税收优惠政策的假申报,按照国家税务总局部署,……老干妈因拖欠上千万营销费用被腾讯告了最近记者从中国裁判文书网上发现深圳市南山区人民法院于6月29日发布了一则执行裁定书,同意原告腾讯请求查封、冻结被告老干妈相关公司名下价值1624。06万元的财产。合同纠纷……
动力是亮点BJ40致敬2020版官图曝光近日,BJ40致敬2020版官图曝光,新车全貌日渐清晰。从官图上即可看出BJ40致敬2020版整体造型与BJ40家族一致,刚正轮廓和短轴设计与BJ212、BJ2020相似……现代IONIQ5最新渲染图曝光内饰设计是亮点近日,从相关信息了解到一组现代IONIQ5最新的渲染图,新车在造型设计上有了新的变化,明显的特点是前脸矩形的日行灯设计,配合镂空的前格栅和复杂的进气口,让整个设计更有辨识度。此……科普AppleMusic无损音乐专题(完)前文回顾Qobuz始终坚持真高解析度无损音乐Qobuz也是另一个发烧友爱用的在线流媒体音乐平台,于2007年在法国创立。Qubuz在无损音乐方面最高能提供24bit……荣耀30pro和nova8相比较,该如何选择?如果非要在这两款手机中选择一款手机进行购买,就小芳个人而言,我会更加倾向于荣耀30pro这款手机会更多一些。不过大家在实际购买手机的过程当中还是要将自身的需求以及两款手机的对比……你在酒吧遇到过哪些震惊你的事?你在酒吧遇到过哪些震惊你的事?我的表情图今天今天的互动话题是你在酒吧遇到过哪些震惊你的事?1男朋友为了看我蹦迪拼命给我敬酒然后给我灌趴下他自……数字化智能化车间规划与建设(100页完整版)作者:高猛大纲目录1、数字化智能化车间概述2、数字化智能化车间的实施步骤与要点3、车间布局与数字化装备产线建设4、物联网建设与数据采集5、数字化生……超大电池,持久畅玩!iQOOZ1x助你畅玩一夏不断电5G技术的高速发展,为用户带来了酣畅的网络体验,但耗电量同样是一个不容忽视的问题。而随着屏幕技术的提升,进入2020年,越来越多机型屏幕提供了对90Hz及更高刷新率的支持,高刷……小程序拼团活动怎么做才有效果?两大经典拼团策划案例分享小程序拼团作为当下主流的社交营销玩法,在各行业应用中也是非常广泛的。策划一场成功的拼团活动,可以实现快速裂变传播,带来更多新客和订单。接下来,我们就介绍一下如何策划一场成……三星低端A40S以及中高端A80值得购买吗三星在4月17日发布了四款手机价格在14993000左右,这四款手机分别是A40S、A60、A70、A80前面说了A60以及A70这两款手机那么下面说说A40S和A80。……Intel的CPU不会选?Intel的CPU价格从低到高推荐Intel作为CPU领域的第一巨头,旗下的产品不计其数,从几百到几千甚至上万的应有尽有,很多电脑小白不知道怎么选,亿说电脑张一亿帮大家筛选出几款性价比较高的,价格从几百到几千的……吉利4。0造车时代全新力作,星越L江城开启集中交付众星捧月,星光熠熠。7月31日,吉利汽车在武汉康顺试驾基地举办了星至江城奔赴L来星越L区域试乘体验品鉴暨交车仪式武汉站活动,现场邀请了120多位吉利车主、媒体朋友以及相关……辛宇无敌自信,东风日产能否撑起三缸奇骏的野心?引言:对于东风日产的此番壮举,除了捏一把汗,我们更多的还是祝福。三缸奇骏,真的是你买我推荐,我买我不买?三缸奇骏上市了,辛宇们能松口气吗?未上市就爆红网络,因全系搭……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网