缓存-分布式锁-Redisson-信号量测试
信号量(Semaphore)
/**
* 车库停车
* 3个车位
*/
@GetMapping("/park")
@ResponseBody
public String park() throws InterruptedException{
RSemaphore park = redisson.getSemaphore("park");
park.acquire();//获取一个信号,获取一个值,占一个车位
return "ok";
}
/**
* 车开走的方法
*/
@GetMapping("/go")
@ResponseBody
public String go() throws InterruptedException{
RSemaphore park = redisson.getSemaphore("park");
park.release();//释放一个车位
return "ok";
}
可以做限制流量
1.执行park,默认redis数据库3个车位会变成2个,假如执行到0个车位,就会等待;当执行go方法,车位由0变成1,park操作可以继续执行了;
1.boolean b = park.tryAcquire();查询是否存在车位;