多个资源分布式锁的问题

多个资源分布式锁的问题
问题描述

一般来说,分布式锁的场景是,多个程序共享同一个资源,加锁的时候只要把这个资源入口锁上就可以了,比如抢火车票。这个场景中,程序和资源是多对1。

多个资源锁的场景是,多个程序要共享多个资源,程序和资源是多对多,比如资源是每个城市的火车票,一个人可以提交多个城市的抢票请求。

方案1
  1. 最简单粗暴的方式是总线锁,我一次把全国都锁住,这样肯定是安全的,但是效率会降低,抢上海和广州的人会冲突。
方案2
  1. 就是把用到的资源锁住,比如抢了ABCD个城市,就锁住这4个
  2. 另一个人来了之后,假设提交BCDE,则要抢到所有城市的锁,才能进入操作

这个方案存在的问题是,如何确保这4个资源的锁,是同时加上去的以及同时被释放的?

在redis上,有一个msetnx命令,可以解决这个问题

[MSETNX key value key value …] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

探讨
  1. 方案2是初步判断可行的,但是在实践中可能还会有坑,这个有待进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值