乐观锁与悲观锁-Redisson-局部变量

原创
小哥 3年前 (2022-11-09) 阅读数 36 #大杂烩

注意:信号量存储在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 "走了";

}
版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门