分布式锁

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

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

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

 

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

如:

setnx  user1 lock

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

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

 

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

 

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

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

posted @ 2018-12-19 20:49  &傻小子  阅读(285)  评论(0编辑  收藏  举报