提一下:
单体应用是一个jvm也就是n对一,单体应用使用普通的锁就可以解决,如可重入锁(ReentrantLock,synchronized等)
分布式应用是多个jvm也就n对多,就必须使用分布式锁来解决,如zookeeper实现的分布式锁或者redis实现的分布式锁
本期讲redis分布式锁:
public void testLock() {
// 1. 从redis中获取锁,setnx
String uuid = UUID.randomUUID().toString();
Boolean lock = this.redisTemplate.opsForValue()
.setIfAbsent("lock", uuid, 2, TimeUnit.SECONDS);
if (lock) {
// 查询redis中的num值
String value = this.redisTemplate.opsForValue().get("num");
// 没有该值return
if (StringUtils.isBlank(value)){
return ;
}
// 有值就转成成int
int num = Integer.parseInt(value);
// 把redis中的num值+1
this.redisTemplate.opsForValue().set("num", String.valueOf(++num));
// 2. 释放锁 del
String script = "if redis