乐观锁与悲观锁-Redisson-局部变量
原创注意:信号量存储在redis中的数字,当该数字大于时0,也就是说,你可以打电话。acquire()方法增加号码,您也可以拨打。release()方法会减少数量,但在调用时。release()之后小于0如果是,该方法将阻塞,直到该数字更大0。
1.信号应用:
/**
* 可以分配信号以限制流量。
*
* @return
* @throws InterruptedException
*/
@GetMapping("/park")
@ResponseBody
public String park() throws InterruptedException {
RSemaphore park = redisson.getSemaphore("park");
park.acquire();//获取信号灯(redis信号测量-1),如果redis中等信号量为0,然后在这里阻塞,直到信号量更大0,可以获取信号量,将继续执行。
//业务代码...
return "ok" + b;
}
@GetMapping("/go")
@ResponseBody
public String go() throws InterruptedException {
RSemaphore park = redisson.getSemaphore("park");
park.release();//释放信号量(redis信号测量+1)
return "走了";
}
2.分布式流量限制信号
/**
* 可以分配信号以限制流量。
*
* @return
* @throws InterruptedException
*/
@GetMapping("/park")
@ResponseBody
public String park() throws InterruptedException {
RSemaphore park = redisson.getSemaphore("park");
boolean b = park.tryAcquire();//这不是阻塞,可以得到信号量是true,无法获取(信号量为0 了)就是false
if (b) {
//执行业务
} else {
//进行限流
return "error";
}
return "ok" + b;
}
@GetMapping("/go")
@ResponseBody
public String go() throws InterruptedException {
RSemaphore park = redisson.getSemaphore("park");
park.release();
return "走了";
}
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除