1. 程式人生 > 其它 >20211114 基於Redis實現分散式鎖(使用Redisson框架)

20211114 基於Redis實現分散式鎖(使用Redisson框架)

原理圖

Redis 相關的四種技術

  • Jedis
  • Lettuce( spring-boot-starter-data-redis 預設引入)
  • RedisTemplate
  • Redisson

簡單使用

操作步驟

  1. pom.xml 新增依賴

    <dependency>
        <groupId>org.redisson</groupId>
        <artifactId>redisson-spring-boot-starter</artifactId>
        <version>3.16.4</version>
    </dependency>
    
  2. application.properties 配置 Redis 連線資訊

    spring.redis.host=localhost
    spring.redis.port=6379
    #spring.redis.password=
    
  3. 簡單使用類

    import org.redisson.api.RLock;
    import org.redisson.api.RedissonClient;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class MyRedisLock {
        @Autowired
        private RedissonClient redissonClient;
    
        public void testLock() {
            RLock rLock = redissonClient.getLock("redisKey");
    
            try {
                rLock.lock();
    
                Thread.sleep(10000000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                if (rLock != null) {
                    rLock.unlock();
                }
            }
        }
    }
    
  4. Spring Boot 啟動類

    @SpringBootApplication
    public class RedisLockApplication {
        public static void main(String[] args) {
            ConfigurableApplicationContext applicationContext = SpringApplication.run(RedisLockApplication.class);
            MyRedisLock myRedisLock = applicationContext.getBean(MyRedisLock.class);
    
            myRedisLock.testLock();
        }
    }
    

實現效果

鎖的型別在 Redis 中是 Hash ,預設 TTL 是 30s ,當 TTL 到達 20s 時,會自動延期,TTL 重新回到 30s

參考資料