zookeeper分布式锁在高并发下获取锁耗时太久
来源:9-3 curator与spring的整合

有丶小帅
2019-04-15
老师你好。我使用你zookeeper分布式锁的实现做了一个减库存的业务。线程先获取到锁,然后访问redis获取库存,之后释放锁。
问题:当200并发的时候,会有超过几分钟才能获取到锁的情况。
环境:在本地虚拟机里面开启一个zookeeper服务。
我在线程等待的时候使用的是countDownLatch.await(1000*60, TimeUnit.MILLISECONDS)。这个应该不会造成获取锁太久的现象。
请老师和各位同僚帮我看看大概是什么问题。
主要业务代码如下:
##获取锁
zookeeperDistributedLock.getLock();
##获取库存
Integer stock = redisLock.get(ProductConst.PRODUCT_STOCK_PREFIX_KEY, input.getProductId(), redisDB, ProductConst.PRODUCT_STOCK_KEY_EXPIRE);
int r = stock - input.getProductQuantity();
##减库存
redisLock.set(ProductConst.PRODUCT_STOCK_PREFIX_KEY, input.getProductId(), String.valueOf(r), ProductConst.PRODUCT_STOCK_KEY_EXPIRE);
##释放锁
zookeeperDistributedLock.releaseLock();
ps:我的zookeeper版本是3.4.13
curator版本是2.9.0
写回答
1回答
-
风间影月
2019-04-15
Zk的分布式锁在并发下的确性能会有损耗,所以往往会用redis来做分布式锁会更好
022019-04-15
相似问题