也可以参考:https://www.cnblogs.com/webwangbao/p/9247318.html
终极版本:Redisson
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.13.4</version>
</dependency>
@Autowired
private Redisson redisson;
/**
* Redisson 最简单实现,推荐终极版本
*
* @return
*/
private String redissonTest() {
RLock lock = redisson.getLock(REDIS_LOCK);
lock.lock();
try {
//看库存数量够不够
ValueOperations<String, String> val = stringRedisTemplate.opsForValue();
String result = val.get("goods:001");
int goodNum = result == null ? 0 : Integer.valueOf(result);
if (goodNum != 0) {
stringRedisTemplate.opsForValue().set("goods:001", String.valueOf(goodNum - 1));
System.out.println("端口 : " + redisPort + ",库存剩余: " + String.valueOf(goodNum - 1));
return "端口 : " + redisPort + ",库存剩余: " + String.valueOf(goodNum - 1);
}
System.out.println("端口 : " + redisPort + ",没有库存了");
return "端口 : " + redisPort + ",没有库存了";
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}