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


相关推荐
小bo波3 小时前
Java Swing 图形用户界面实验 —— 从算术练习到游戏开发的完整实践
java·课程设计·gui·游戏开发·扫雷·swing
咖啡八杯4 小时前
GoF设计模式——备忘录模式
java·后端·spring·设计模式
SamDeepThinking14 小时前
裁掉那个差程序员后,给你看团队里高手的代码:这个习惯,希望你有
java·后端·程序员
朕瞧着你甚好15 小时前
技术雷达 & Java 集成评估报告 — Apache Tika 3.3.1
java·ai编程
vivo互联网技术16 小时前
从 10 分钟到 1 秒:ES 深度分页任意跳页的三轮优化实战
服务器·数据库·redis·elasticsearch·深度分页
MacroZheng16 小时前
短短几天,暴涨2.8万Star!又一款编程神器开源!
java·人工智能·后端
SamDeepThinking16 小时前
函数式编程:用BiFunction消除多类型分支的代码重复
java·后端·面试
Flittly1 天前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring
小兔崽子去哪了1 天前
Java 生成二维码解决方案
java·后端