前言

2023-03-02 18:24:17 浏览数 (2)

前言

以前还傻傻的自己写分布式锁实现:基于缓存或 zookeeper 的分布式锁实现。果然,你能想到的轮子,99% 都已经有人造好了,并且,比你自己造的好的多。

RedisLockRegistry

  1. 依赖
代码语言:javascript复制
    implementation("org.springframework.boot:spring-boot-starter-data-redis")
    implementation("org.springframework.integration:spring-integration-redis")
  1. 配置
代码语言:javascript复制
@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. 使用
代码语言:javascript复制
       val lock = lockRegistry.obtain("lock")
            if (lock.tryLock()) {
                try {
                   // 业务实现
                } finally {
                    lock.unlock()
                }
            }

0 人点赞