RedisSon實現分佈式鎖

主要步驟:
1、引入RedisSon的依賴
2、配置RedisSon的配置類
3、使用RedisSon構建分佈式鎖,在需要使用分佈式鎖的地方注入RedissonClient這個類來獲取鎖

第一步、引入依賴:

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--redisson-->
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.6.5</version>
        </dependency>
    </dependencies>

第二步:RedisSon的配置類

@Configuration
public class RedisSonConfig {

    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port}")
    private String port;

    @Value("${spring.redis.password}")
    private String password;

    @Bean
    public RedissonClient redissonClient() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://" + host + ":" + port);
       // config.useSingleServer().setAddress("redis://" + host + ":" + port).setPassword(password) redis 有密碼的時候需要設置;
        return Redisson.create(config);
    }

}
第三步:使用分佈式鎖

@RestController
public class TestRedisSonController {
    @Autowired
    RedissonClient  redissonClient;
    
    @GetMapping("testRedisSon")
    public String testRedisSon() {{
        RLock lock = redissonClient.getLock("testRedissonLock");
        boolean locked = false;
        try {
            locked = lock.tryLock(0, 10, TimeUnit.SECONDS);
            if (locked) {
                Thread.sleep(30000);
                return "ok.......................................";
            } else {
                return "獲取鎖失敗.......................................";
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
            return "獲取鎖異常.......................................";
        } finally {
            if (!locked) {
                return "獲取鎖失敗";
            }
            lock.unlock();
        }
    }}

}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章