老师你好。我使用你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