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


相关推荐
AI分享猿27 分钟前
重度长上下文开发怎么选?先看缓存是否吃额度
缓存·ai编程
亦暖筑序29 分钟前
AgentScope-Java 入门:用 Middleware 审计 Agent 调用
java·ai编程·agentscope
你驴我39 分钟前
WhatsApp 消息撤回与编辑的幂等性设计实践
java·服务器·前端·后端·python
向日的葵0061 小时前
Redis会话机制vsJWT机制深度解析
数据库·redis·python·缓存·系统架构·jwt
青山木1 小时前
Hot 100 ---腐烂的橘子
java·数据结构·后端·算法·leetcode·广度优先
小龙报2 小时前
【优选算法】1. 水果成蓝 2.找到字符串中所有字母的异位词
java·c语言·数据结构·数据库·c++·redis·算法
自强的小白2 小时前
重点!起始时间和结束时间与创建时间和修改时间的区别(localdate与LocaldateTIME区别)以及增删改查什么时候设置目前时间(添加和更新员工时)
java
薛定谔的猫19822 小时前
LLaMA-Factory +DeepSpeed 分布式多卡训练实战全解
分布式·deepspeed·zero·多卡训练·多卡分布式训练
雪的季节2 小时前
Python 线程同步与异步编程 全解析
java·开发语言
吃饱了得干活2 小时前
缓存与数据库一致性:从理论到实战
java·后端·面试