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

相关推荐
2301_773643621 天前
ceph分布式存储
分布式·ceph
Solis程序员1 天前
解决双写不一致!Canal+Outbox+Kafka 高可靠事件驱动架构
redis·分布式·架构·kafka·canal
东方巴黎~Sunsiny1 天前
实战:RocketMQ 幂等 + Redis 分布式锁 + 异常重试 保姆级教程
redis·分布式·rocketmq
电商API_180079052471 天前
高可用采集架构:分布式定时抓取淘宝商品详情项目设计
大数据·分布式·架构·数据挖掘·网络爬虫
heimeiyingwang1 天前
【架构实战】线程池设计:高并发系统的资源管理艺术
分布式·架构
一个骇客1 天前
分布式批处理:当你的单机脚本跑了一天一夜还没出结果
分布式·架构
小蒋学算法1 天前
redis分布式锁实现
数据库·redis·分布式
珠***格1 天前
四可装置核心技术:高精度采集、边缘计算、协议自适应
大数据·人工智能·分布式·能源·边缘计算
AI人工智能+电脑小能手1 天前
【大白话说Java面试题 第97题】【Mysql篇】第27题:说说分库与分表的设计?
java·开发语言·数据库·分布式·mysql·算法
小张小张爱学习1 天前
分布式高频面试题
java·分布式