spring-redis 自带分布式锁实现
前言
以前还傻傻的自己写分布式锁实现:基于缓存或 zookeeper 的分布式锁实现。果然,你能想到的轮子,99% 都已经有人造好了,并且,比你自己造的好的多。
RedisLockRegistry
- 依赖
implementation("org.springframework.boot:spring-boot-starter-data-redis")
implementation("org.springframework.integration:spring-integration-redis")
- 配置
@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
。
- 使用
val lock = lockRegistry.obtain("lock")
if (lock.tryLock()) {
try {
// 业务实现
} finally {
lock.unlock()
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!