分布式锁实现方案优缺点分析
项目修改 :
项目中用的是数据库分布式锁,但会造成大量数据堆积在数据库update这里,将压力分给业务层。
<update id="decreaseItemSpecStock">
update
items_spec
set
stock = stock - #{pendingCounts}
where
id = #{specId}
and
stock >= #{pendingCounts}
</update>
public void decreaseItemSpecStock(String specId, int buyCounts) {
RLock lock = redissonClient.getLock("Item_LOck" + specId);
lock.lock(5, TimeUnit.SECONDS);
try {
int result = itemsMapperCustom.decreaseItemSpecStock(specId, buyCounts);
if(result !=1){
throw new RuntimeException("库存不足");
}
}catch (RuntimeException e){
throw e;
}
lock.unlock();
}