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脚本去做的。

相关推荐
骑着蜗牛撵大象3272 小时前
558 万美元训出 671B 模型:DeepSeek-V3 算法与系统的协同拆解
分布式·算法·moe·deepseek-v3·mla·fp8训练
德迅云安全-上官3 小时前
德迅游戏盾:面向 TCP 业务的分布式云安全防护方案
分布式·tcp/ip·游戏
麻瓜code5 小时前
分布式锁演进:从一个用户下两单,到 Redisson,我改了四版
分布式·wpf
skywalk81635 小时前
hive —— 多机 AI Agent 协同的任务总线:分布式,多节点同时运行,保障不会宕机
人工智能·hive·分布式
一条泥憨鱼6 小时前
【RabbitMQ】高级篇
java·分布式·rabbitmq·php·ruby
棣廷7 小时前
初识Spark Core
大数据·分布式·spark
凯凯姜16 小时前
分布式锁场景问题
分布式
每天一道题19 小时前
CAP、Raft 与多数派:分布式系统如何达成一致?
分布式·后端·微服务
方方洛21 小时前
ray教程-18-性能调优与反模式
人工智能·分布式·机器学习
每天一道题1 天前
分布式锁真的安全吗?从 Redis 锁、Lease 到 Fencing Token
redis·分布式·安全