首页 > 数据库 >Springboot + redis分布式锁

Springboot + redis分布式锁

时间:2024-03-31 22:33:20浏览次数:16  
标签:redisson 匹配 Springboot lock redis System println 分布式

1.引入redis和redisson

<!--        redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

<!--        redisson-->
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.16.4</version>
        </dependency>

 

2.配置一下

application.yml里面加上 redisson配置文件

redisson:
  config: classpath:redisson.yaml

新建一个redisson.yaml  填一些redis配置

singleServerConfig:
  # Redis 服务器的地址
  address: "redis://127.0.0.1:6379"
  # 连接池的大小
  connectionPoolSize: 64
  # Redis 数据库索引
  database: 0
  # 超时时间,单位为毫秒
  timeout: 3000
  # Redis 命令失败重试次数
  retryAttempts: 3
  # 两次命令之间重试的时间间隔,单位为毫秒
  retryInterval: 1500
  # 发布和订阅的连接的最小数量
  subscriptionConnectionMinimumIdleSize: 1
  # 发布和订阅的连接池的大小
  subscriptionConnectionPoolSize: 50
  # 当前处理 Redis 命令的线程共享的联接
  connectionMinimumIdleSize: 10

 

redisson还要一个配置类:

@Configuration
public class RedissonConfig {

    @Bean(destroyMethod = "shutdown")
    public RedissonClient redissonClient() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://localhost:6379");
        return Redisson.create(config);
    }
}

 

这样配置完基本上ok了,然后就可以直接 lock  , unlock 来进行获取锁和释放锁的操作。

 

3.实践

下面这个场景是模拟 做一个用户匹配的操作,例如相亲配对用户,某用户很热门,许多用户争抢匹配,但是该用户只有一个,防止出现超匹配的问题,就要进行上锁

//   注入Redisson
    @Autowired
    private RedissonClient redissonClient;

    @Override
    public User matchId(Integer id) {
        RLock lock = redissonClient.getLock("lock_" + id);
        try {
            if (lock.tryLock()) {
                // 获取锁成功,执行业务逻辑
                User user = userMapper.selectById(id);
                if (user != null) {
                    // 执行匹配逻辑
                    // ...
                    System.out.println("匹配成功");
                    return user;
                } else {
                    System.out.println("用户不匹配或已被匹配");
                }
            }
//            锁被其他人占用着
            else {
                System.out.println("匹配请求处理中,请稍后再试");
            }
        } catch (Exception e) {
            Thread.currentThread().interrupt();
            System.out.println("匹配请求被中断");
        } finally {
            // 释放锁
            lock.unlock();
        }
        return null;
    }

 

上面的还是一个单节点redis的操作,如果要部署集群redis的话,就可以用上 redlock的方法,

保证集群的全部节点都来管理同一个锁的状态,防止某个上锁的节点突然崩溃了,然后其它某个节点是没上锁的状态,就可以进行多次匹配的问题

标签:redisson,匹配,Springboot,lock,redis,System,println,分布式
From: https://www.cnblogs.com/Hello233/p/18107407

相关文章

  • 基于springboot的企业高校财务管理系统
    jdk版本:1.8及以上ide工具:IDEA或者eclipse数据库:mysql 编程语言:java框架:SSM/springboot都有maven:3.6.1前端:layui+bootstrap+jsp本文首先实现了高校财务处理系统的发展随后依照传统的软件开发流程,最先为系统挑选适用的言语和软件开发平台,依据需求分析开展控制模块......
  • 基于springboot实现房产销售系统项目【项目源码+论文说明】计算机毕业设计
    基于springboot实现房产销售系统演示摘要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于房产销售系统当然也不能排除在外,随着网络技术的不断成熟,带动了房产销售系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还......
  • 基于springboot实现旅游网站系统项目【项目源码+论文说明】计算机毕业设计
    基于springboot实现旅游网站系统演示摘要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势,旅游网站当然也不能排除在外,随着旅游网站的不断成熟,它彻底改变了过去传统的旅游网站方式,不仅使旅游管理难度变低了,还提升了旅游网站的灵活性......
  • 基于springboot实现房屋租赁系统项目【项目源码+论文说明】
    基于springboot实现房屋租赁系统演示 摘要社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。互联网具有便利性,速度快,效率高,成本低等优点。因此,构建符合自己要求的操作系统是非常有意义的......
  • 基于springboot实现免税商品优选购物商城系统项目【项目源码+论文说明】
    基于springboot实现免税商品优选购物商城系统演示摘要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势,免税商品优选购物商城当然也不能排除在外,随着购物商城的不断成熟,它彻底改变了过去传统的免税商品优选购物商城方式,不仅使商城管......
  • 旅游管理系统|基于springBoot旅游管理系统设计与实现(附项目源码+论文)
    基于springBoot旅游管理系统设计与实现一、摘要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本旅游管理系统就是在这样的大环境下诞生,其可以帮助使用者在短时间内处理完毕庞大的数据信息,使用这种软件......
  • Springboot 实现Aop切面编程
    1.引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency> 2.写切面方法现在有个方法,publicList<User>getList(){List<User>users=......
  • redis集群
    redis主从复制主要解决单机机器故障,容量瓶颈等问题主从复制作用:1可以为redis提供多个副本,一个master可以有多个slave,一个slave只能由一个master实现方法:1通过slaveof命令  异步执行复制过程在从节点执行> slav......
  • SpringBoot集成Junit单元测试找不到bean报错:expected at least 1 bean which qualifie
    发生缘由调用封装的MinIOstarter运行环境电脑系统版本:Windows1064bitIdea:2023.2(UltimateEdition)Maven:apache-maven-3.6.0Docker:Dockerversion26.0.0,build2ae903eMinIO:加载本地镜像,不清楚版本号jdk版本:jdk-8spring.boot.version:2.3.9.RELEASEminio依赖:7.1.......
  • 数据下钻--vue+springboot+echarts
    今天下午整了下数据下钻直接上成果: 然后左边可以选范围:左边调范围,然后对应的会显示那些省份满足条件。 然后就是鼠标悬停在某个省份,就显示相应数量: 然后可以点击对应省份进行下钻到市然后可以继续下钻到县:  同样的呢,市和县都可以向省一样那样显示范围和调试: ......