springboot 集成redission 以及分布式鎖的使用


1、引入jar包

        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.13.4</version>
        </dependency>

  

2、增加Configuration類

@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 getRedisson() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://" + host + ":" + port).setPassword(password);
        return Redisson.create(config);
    }
}

  

3、使用redission分布式鎖

@Autowired
private RedissonClient redissonClient;

  

//方法區
String key = "aa:bb:cc:01";
RLock rLock =redissonClient.getLock(key);
try{
// 嘗試加鎖,最多等待1秒,上鎖以后10秒自動解鎖
// 沒有Watch Dog ,10s后自動釋放 boolean res = rLock.tryLock(1,10, TimeUnit.SECONDS); if(!res){   return new GeneralVO<>(400, "請勿重復提交", false); } }finally{ rLock.unlock(); }

  

 

private void redissonDoc() throws InterruptedException {
    //1. 普通的可重入鎖
    RLock lock = redissonClient.getLock("generalLock");

    // 拿鎖失敗時會不停的重試
    // 具有Watch Dog 自動延期機制 默認續30s 每隔30/3=10 秒續到30s
    lock.lock();

    // 嘗試拿鎖10s后停止重試,返回false
    // 具有Watch Dog 自動延期機制 默認續30s
    boolean res1 = lock.tryLock(10, TimeUnit.SECONDS);

    // 拿鎖失敗時會不停的重試
    // 沒有Watch Dog ,10s后自動釋放
    lock.lock(10, TimeUnit.SECONDS);

    // 嘗試拿鎖100s后停止重試,返回false
    // 沒有Watch Dog ,10s后自動釋放
    boolean res2 = lock.tryLock(100, 10, TimeUnit.SECONDS);

    //2. 公平鎖 保證 Redisson 客戶端線程將以其請求的順序獲得鎖
    RLock fairLock = redissonClient.getFairLock("fairLock");

    //3. 讀寫鎖 沒錯與JDK中ReentrantLock的讀寫鎖效果一樣
    RReadWriteLock readWriteLock = redissonClient.getReadWriteLock("readWriteLock");
    readWriteLock.readLock().lock();
    readWriteLock.writeLock().lock();
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM