Redission快速入门---分布式锁

基于Redis的分布式锁优化

Redission介绍

Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的ava常用对象,还提供了许多分布式服务,其中就包含了各种分布式锁的实现。

Redission入门

1、引入依赖

java 复制代码
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-data-23</artifactId>
    <version>3.13.6</version>
</dependency>

2、配置Redsssion客户端

java 复制代码
package com.hmdp.config;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RedisConfig {

    @Bean
    public RedissonClient redissonClient() {
        // 1. 创建 Config 对象
        Config config = new Config();
        
        // 2. 添加单点地址,注意:地址必须以 "redis://" 开头
        //也可使用config.useClusterServers()添加集群地址
        config.useSingleServer()
              .setAddress("redis://192.168.150.101:6379")
              .setPassword("123321");

        // 3. 创建 Redisson 实例并返回
        return Redisson.create(config);
    }
}

3、使用Redission的分布式锁

java 复制代码
@Resource
    private RedissonClient redissonClient;

    @Test
    void testRedisson() throws InterruptedException {
        // 1. 获取锁(可重入),指定锁的名称
        RLock lock = redissonClient.getLock("anyLock");

        /**
         * 2. 尝试获取锁
         * 参数1:获取锁的最大等待时间(期间会重试)
         * 参数2:锁自动释放时间(到期自动解锁)
         * 参数3:时间单位
         */
        boolean isLock = lock.tryLock(1, 10, TimeUnit.SECONDS);

        // 3. 判断释放获取成功
        if (isLock) {
            try {
                System.out.println("执行业务");
            } finally {
                // 4. 释放锁
                // 建议增加判断:只有锁还在且是当前线程持有的才释放,防止误释放或报错
                if (lock.isHeldByCurrentThread()) {
                    lock.unlock();
                }
            }
        }
    }

Redission可重入锁原理



Redission锁重试和看门狗(WatchDog)机制


Redission的multLock原理

Redission分布式锁主从一致性问题


相关推荐
SL_staff15 分钟前
周报越厚问题越拖?用结构化执行机制让周报回归决策价值
java·spring cloud·开源
梅梅绵绵冰22 分钟前
JVM虚拟机
java·开发语言·jvm
golang学习记25 分钟前
Python vs Go:2026年到底该怎么选
java·vscode·python·golang·pycharm·goland
Shaoshing1 小时前
消息顺序
java·开发语言
爱吃火鸡面呀1 小时前
深入理解 Spark RDD:五大特性与实战解析
大数据·分布式·spark
夕除1 小时前
redis--ziplist
redis
我命由我123451 小时前
SQL 检测脚本
java·数据库·sql·功能测试·单元测试·压力测试·可用性测试
Hpc_Fun2 小时前
GPU 工作站品牌怎么比?五把可核验尺子、加权评分脚本与场景重排
java·信创·gpu工作站·品牌对比·加权评分
const_qiu2 小时前
第四章 03:4.3 Tools —— 让 Agent 会用工具
java·人工智能
Rain的Java大神之路2 小时前
百万并发直播弹幕系统设计全解:看懂了扇出,你就看懂了高并发的八成
java·后端·面试