欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

分布式锁

程序员文章站 2022-03-26 11:06:27
当项目使用分布式架构时,就会有可能出现客户端数据重复提交的情况 比如,当你向服务器发起一个借贷命令时,如果手速够快,可能会向后台的两个拨款服务器发起同一个请求 此时, 如果不进行处理, 后台可能会向用户拨款两次, 但是用户只有一次的借钱记录. 这时, 也是用到了常用sso登录时的技术Redis, 前 ......

当项目使用分布式架构时,就会有可能出现客户端数据重复提交的情况

  比如,当你向服务器发起一个借贷命令时,如果手速够快,可能会向后台的两个拨款服务器发起同一个请求

此时, 如果不进行处理, 后台可能会向用户拨款两次, 但是用户只有一次的借钱记录. 

 

这时, 也是用到了常用sso登录时的技术redis, 前台向后端发起某个请求时, 拿到请求的这台服务器会去访问redis 使用redis的setnx方法

如:

setnx  user1 lock

这样如果该user1是第一次存入redis ,会返回1  相当于拿到这个请求处理的锁,可以继续执行,  如果不是第一次,则会返回0,说明没有拿到处理的锁

这个时候,此台服务器就没有必要继续执行. 这就起到了分布式锁的作用

 

而且,本身redis是单线程的,在一个客户端登录之后,其他客户端无法登陆和操作.这就有了安全保证

 

同时, 如果项目在拿到这个分布试锁的时候,服务器宕机了, 但是redis中已经存在了相应的key, 那么程序就会出现思索的情况,因此,在创建这个锁的时候

最好给他设定一个超时时间, 如多这段时间内,这个锁没有被销毁,则会自动销毁.