首页 > 其他分享 >应用问题解决-分布式锁(LUA保证删除原子性)

应用问题解决-分布式锁(LUA保证删除原子性)

时间:2023-06-06 14:23:59浏览次数:42  
标签:加锁 uuid 删除 lock 原子 LUA 分布式 客户端

问题:删除操作缺乏原子性

场景

1、index1获得锁、执行具体操作、比较lock的uuid值确实和自己生成的uuid是否相等,相等则删除锁。

uuid = v1

set(lock, uuid)

uuid.equals(get("lock"))

2、但是index1执行删除前,lock刚好过期时间已经到了,被redis自动释放

3、此时index2获取锁,执行具体操作,index1删除锁,结果把index2的锁删除了【因为index1已经比较过uuid相等了所以可以删除】

 

LUA脚本有一定的原子性,不会被其它命令插队,可以完成一些redis事务性的操作。

LUA脚本来保证删除的原子性

 

1、加锁

2、lua脚本保证删除的原子性操作

 

分布式锁的四个条件:

1、互斥性。在任意时刻,只有一个客户端能持有锁

2、不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其它客户端能加锁

3、解铃还系铃人:加锁和解锁必须是同一个客户端,客户端不能把别人加的锁解了

4、加锁和解锁必须具有原子性

 

标签:加锁,uuid,删除,lock,原子,LUA,分布式,客户端
From: https://www.cnblogs.com/fxzm/p/17459032.html

相关文章

  • 分布式搜索elasticsearch集群监控工具bigdesk
    bigdesk是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu、内存使用情况,索引数据、搜索情况,http连接数等。项目git地址: https://github.com/lukas-vlcek/bigdesk。和head一样,它也是个独立的网页程序,使用方式和head一样。插件安装运行......
  • 分布式事务的解决方案及中间件
    方案一:XA两阶段提交方案是一种比较重的操作,其中有有以下三个角色:事务管理器(TM)、事务协调者(TC)、资源管理器(RM),资源锁定时间长,效率低。方案二:TCC采用冻结预留的方式锁定资源,开发量较大,常用于资金交易类的场景。方案三:本地消息表严重依赖消息表来管理事务,并不适用高......
  • linux 的删除
    1,删除命令行rm-rf文件夹名称2,下载wget网址--------------------查找ES进程号ps-ef|grepelastickill-93250 3,安装yum1.首先检测是否安装build-essential包sudoapt-getinstallbuild-essential2.安装yumsudoapt-getinstallyum---------------------------------......
  • 分布式锁(设置锁和过期时间)
    问题描述:随着业务发展的需要,原单体单机部署的系统被演化分成分布式集群系统后,由于分布式系统多线程、多进程且分布在不同机器上,这将使原单机部署情况下的并发控制锁策略失效,单纯的JavaAPI并不能提供分布式锁的能力。为了解决这个问题就需要一种跨JVM的互斥机制来控制共享资源的......
  • 用c实现:编译出来的可执行文件运行完成后删除自己
    没办法。可执行文件和bat脚本文件不一样,它运行时会被加锁,无法获取写权限。原由:因为每次编译一个c文件后都会生成一个exe文件,占用了我的视野资源,所以我每次都要定期运行一个批处理脚本来清理这些文件。于是我就想,exe文件自己不是也有运行权限吗,它能不能自己获取自己的写权限在执行......
  • DOS创建/删除/描述 windows服务
    1、以管理员运行cmd,输入sccreatetestbinPath=程序路径\xxx.exe,主要“=”后面必须要空格在服务里面查看结果2、设置服务格式:scconfig服务名start=AUTO   (自动) scconfig服务名start=DEMAND (手动) scconfig服务名start=DISABLED(禁用)    注意:等号......
  • 分布式爬虫
    分布式分布式的本质就如上期提到的一个概念:分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。这就是在说,把廉价的计算机堆到一起,通过程序控制,使其整体用起来像个高性能计算机,目的就是节约成本。对于分布式爬虫系统来说,假设1台机器能10天爬完一个任务......
  • linux 中删除文本开头至匹配字符之间的内容
     001、[root@PC1test3]#lsa.txt[root@PC1test3]#cata.txt##测试数据3544agfgene4587genedfgiugene887777[root@PC1test3]#sed'1,/gene/{/gene/b;d}'a.txt##删除开头至匹配gene之间的数据gene4587genedfgiugen......
  • 分布式和为服务区别
    微服务介绍(史上最全)答疑|分布式和微服务的区别?   ......
  • 删除额外的空格
    概括该函数接口用于删除输入字符串中额外的空格(多个连续空格将被优化为一个空格)参数str:input&output;传入的非空字符串地址。返回值无注意1、传入的str参数必须为可更改的字符串,不允许传入constchar*类型的字符串2、传入的必须为字符流,绝不允许传入字节流,......