spring-redis 自帶分佈式鎖實現

前言

以前還傻傻的自己寫分佈式鎖實現:基於緩存或 zookeeper 的分佈式鎖實現。果然,你能想到的輪子,99% 都已經有人造好了,並且,比你自己造的好的多。

RedisLockRegistry

  1. 依賴
    implementation("org.springframework.boot:spring-boot-starter-data-redis")
    implementation("org.springframework.integration:spring-integration-redis")
  1. 配置
@Configuration
class RedisLockConfiguration {

    @Bean
    fun redisLockRegistry(redisConnectionFactory: RedisConnectionFactory): LockRegistry {
        return RedisLockRegistry(redisConnectionFactory, "redis-lock", 60000L * 60)
    }
}

LockRegistry 除了提供 RedisLockRegistry 的實現,還提供了 DefaultLockRegistry 等單機鎖實現;

RedisLockRegistry 提供了兩種 Redis 分佈式鎖實現,一種是 RedisSpinLock ,通過週期性(100ms)檢查是否可以獲取鎖來獲取鎖;一種是 RedisPubSubLock,鎖是通過 redis pub-sub 訂閱獲取的;默認是 RedisSpinLock

  1. 使用
       val lock = lockRegistry.obtain("lock")
            if (lock.tryLock()) {
                try {
                   // 業務實現
                } finally {
                    lock.unlock()
                }
            }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章