Redis教程

缓存: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,没获取到,正好,可以指定一下没获取到的逻辑,返回错误页面什么的。或者说,服务器繁忙什么的。

 

这篇关于缓存:Redisson,信号量测试的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!