数据库
首页 > 数据库> > 缓存:Redisson,信号量测试

缓存:Redisson,信号量测试

作者:互联网

 

场景:车库停车。 

 

 

    @Autowired
    private RedissonClient redissonClient;

/**
     * 尝试获取车位 [信号量]
     * 信号量:也可以用作限流
     *    先在redis中设置一下,有几个车位。 设置park键值
     */
    @ResponseBody
    @GetMapping("/index/park")
    public String park() {

        RSemaphore park = redissonClient.getSemaphore("park");
        boolean acquire = park.tryAcquire(); //占车位
        return "获取车位 =>" + acquire;
    }

    /**
     * 尝试释放车位
     */
    @ResponseBody
    @GetMapping("/index/go/park")
    public String goPark() {

        RSemaphore park = redissonClient.getSemaphore("park");
        park.release();//释放一个车位
        return "ok => 车位+1";
    }

 

 

 

==================================

也可以做分布式限流。

做限流 可以使用 tryAcquire方法。 分布式限流,如果要访问这个服务,获取信号量,做完就+1这样子。

acquire 是阻塞式的,如果没有车位,就等着

tryAcquire的话,就不会,他返回一个bool,如果没车位就算了,不会阻塞着。

如果很多流量过来,就可以tryAcquire,没获取到,正好,可以指定一下没获取到的逻辑,返回错误页面什么的。或者说,服务器繁忙什么的。

 

标签:redissonClient,缓存,park,tryAcquire,信号量,Redisson,限流,车位
来源: https://www.cnblogs.com/wyw123456/p/15849740.html