分布式锁
程序员文章站
2022-06-03 22:39:34
当项目使用分布式架构时,就会有可能出现客户端数据重复提交的情况 比如,当你向服务器发起一个借贷命令时,如果手速够快,可能会向后台的两个拨款服务器发起同一个请求 此时, 如果不进行处理, 后台可能会向用户拨款两次, 但是用户只有一次的借钱记录. 这时, 也是用到了常用sso登录时的技术Redis, 前 ......
当项目使用分布式架构时,就会有可能出现客户端数据重复提交的情况
比如,当你向服务器发起一个借贷命令时,如果手速够快,可能会向后台的两个拨款服务器发起同一个请求
此时, 如果不进行处理, 后台可能会向用户拨款两次, 但是用户只有一次的借钱记录.
这时, 也是用到了常用sso登录时的技术redis, 前台向后端发起某个请求时, 拿到请求的这台服务器会去访问redis 使用redis的setnx方法
如:
setnx user1 lock
这样如果该user1是第一次存入redis ,会返回1 相当于拿到这个请求处理的锁,可以继续执行, 如果不是第一次,则会返回0,说明没有拿到处理的锁
这个时候,此台服务器就没有必要继续执行. 这就起到了分布式锁的作用
而且,本身redis是单线程的,在一个客户端登录之后,其他客户端无法登陆和操作.这就有了安全保证
同时, 如果项目在拿到这个分布试锁的时候,服务器宕机了, 但是redis中已经存在了相应的key, 那么程序就会出现思索的情况,因此,在创建这个锁的时候
最好给他设定一个超时时间, 如多这段时间内,这个锁没有被销毁,则会自动销毁.