Redisson分布式锁

一、依赖及配置

依赖

TypeScript 复制代码
<dependency>
	<groupId>org.redisson</groupId>
	<artifactId>redisson</artifactId>
	<version>3.13.6</version>
</dependency>

配置

为config类设置redis地址端口和密码,用于创建RedissonClient对象,进行锁操作

java 复制代码
@Configuration
public class RedissonConfig {

    @Bean
    public RedissonClient redissonClient(){
        // 配置
        Config config = new Config();
        config.useSingleServer().setAddress("redis://192.168.150.101:6379")
            .setPassword("123321");
        // 创建RedissonClient对象
        return Redisson.create(config);
    }
}

基本使用

step1:获取指定一个指定名字锁的对象。

step2:尝试获取锁并接收boolean。

step3:执行业务并释放锁。

java 复制代码
@Resource
private RedissionClient redissonClient;

@Test
void testRedisson() throws Exception{
    //获取锁(可重入),指定锁的名称
    RLock lock = redissonClient.getLock("anyLock");
    //尝试获取锁,参数分别是:获取锁的最大等待时间(期间会重试),锁自动释放时间,时间单位
    boolean isLock = lock.tryLock(1,10,TimeUnit.SECONDS);
    //判断获取锁成功
    if(isLock){
        try{
            System.out.println("执行业务");          
        }finally{
            //释放锁
            lock.unlock();
        }
    }
}

二、原理

(一)可重入实现

简单来说就是看到有锁的时候,不要直接放弃,而是再判断一下是不是当前线程自己的锁,这样同一个锁就可以让同一个线程反复进入。

这些是在reddison底层实现,平时开发可以不用考虑。由于这些操作很多,为了保证原子性,底层是用lua脚本去做的。

相关推荐
小罗水12 小时前
附录D 常见问题排查指南
分布式
华章酱1 天前
基于 RabbitMQ 与 Hyperf 的消息顺序性保障方案
分布式·rabbitmq
ACP广源盛139246256731 天前
2026 PCIe互连芯片@ACP#国产替代格局解析:芯动科技领跑高端交换芯片赛道
大数据·网络·数据库·人工智能·分布式·嵌入式硬件
creator_Li1 天前
Kafka深入刨析-Consumer
分布式·kafka
国科安芯1 天前
四通道集成降压稳压器在低轨卫星星座分布式供电架构中的应用研究
分布式·架构·电源管理系统·低轨卫星星座·分布式供电·dc-dc降压稳压器·抗辐射加固
土司大王1 天前
黑马点评——分布式锁与 Redis 消息队列
数据库·redis·分布式
国科安芯2 天前
低轨卫星姿态与轨道控制系统中高可靠MCU的选型研究——基于AS32S601的抗辐照性能试验数据分析
分布式·科技·单片机·嵌入式硬件·系统架构
谢白羽2 天前
SGLang源码剖析-2-sglang双层体系架构全景
分布式·架构·llm·vllm·sglang
霸道流氓气质2 天前
分布式锁 — 概念、原理与实践
分布式
杰佛史彦明 本王是暴君2 天前
分布式日志收集系统: Facebook Scribe
分布式·facebook