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


相关推荐
Thanks_ks1 分钟前
分布式系统中的并发控制与分布式锁机制深度剖析
redis·zookeeper·高并发·分布式锁·架构设计·并发控制·分布式系统
CN-Dust1 分钟前
【C++】输入cin例题专题
java·c++·算法
xin_nai1 小时前
LeetCode热题100(Java)(6)矩阵
java·leetcode·矩阵
代码AI弗森6 小时前
一文理清楚“算力申请 / 成本测算 / 并发评估”
java·服务器·数据库
Java开发的小李6 小时前
SpringBoot + Redis 实现分布式 Session 共享(解决多实例登录状态丢失问题)
spring boot·redis·分布式
Old Uncle Tom7 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
小小小米粒7 小时前
Collection单列集合、Map(Key - Value)双列集合,多继承实现。
java·开发语言·windows
摇滚侠7 小时前
expdp 查看帮助
java·数据库·oracle
:1218 小时前
java基础
java·开发语言
tsyjjOvO8 小时前
分布式事务 Seata 与链路追踪 SkyWalking 全解析
分布式·skywalking