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分布式锁主从一致性问题


相关推荐
heimeiyingwang1 小时前
【架构实战】分布式事务:从CAP定理到Seata实战,一文讲透跨服务数据一致性
分布式·架构
福大大架构师每日一题1 小时前
agno v2.9.0发布:身份感知调度、缓存隔离、安全加固与组件重建全面升级
安全·缓存
Lam Tang1 小时前
APS 系列文章 08
java·代理模式
萧瑟余晖2 小时前
Java深入解析篇三十三之消息队列
java·开发语言
码匠许师傅2 小时前
【C++ 面试真题】聊聊 C++ 的序列容器
java·c++·面试
IT爱学堂2 小时前
尚硅谷Java+AI大模型应用开发革新版本 2025年3月
java·开发语言·人工智能
不爱编程的小九九3 小时前
小九源码-springboot004-springboot智能阅读推荐系统
java·spring boot·后端
SCandL1524 小时前
Docker的实战应用
java·docker·容器
AC赳赳老秦4 小时前
OpenClaw 多源采集公开行业数据:从原始信息到研究报告初稿的自动化实践
java·c语言·c++·python·php·deepseek·openclaw
Java成神之路-4 小时前
深入理解三大高频队列:ArrayDeque、LinkedList、PriorityQueue 方法、特性与场景选择
java