redission分布式锁防止重复初始化问题

 更新时间:2020年11月20日 11:20:09   作者:黒曼巴  
这篇文章主要介绍了redission分布式锁防止重复初始化问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

配置地址:

redisson:
 # Redis服务地址 如果集群使用","进行分割
 server-address: redis://${spring.redis.host}:${spring.redis.port}
 database: ${spring.redis.database}

创建配置类:

@ConfigurationProperties(prefix = "redisson")
@Configuration
public class RedissonConfig {
  /** Redis服务地址 如果集群使用","进行分割 */
  private String serverAddress;
  private Integer database;

  public String getServerAddress() {
    return serverAddress;
  }

  public void setServerAddress(String serverAddresss) {
    this.serverAddress = serverAddresss;
  }

  public Integer getDatabase() {
    return database;
  }

  public void setDatabase(Integer database) {
    this.database = database;
  }
}

注册redission Bean:

/**
   * RedissonClient
   * @return
   */
  @Bean
  public RedissonClient redissonClient(){
    String splitChar = ",";
    String serverAddress = redissonConfig.getServerAddress();
    String[] serverAddressArr = serverAddress.split(splitChar);

    Config config = new Config();
    if (serverAddressArr.length == 1) {
      //单例redis
      config.useSingleServer()
          .setAddress(redissonConfig.getServerAddress())
          .setDatabase(redissonConfig.getDatabase());
    } else {
      //集群redis
      config.useClusterServers().addNodeAddress(serverAddressArr);
    }
    return Redisson.create(config);
  }

防止重复初始化:

**
   * 初始化告警统计记录 保证告警统计不会被重复初始化
   *
   * @param areaId 部门id
   * @throws BizException
   */
  public void initWarningStatisticsSafe(String areaId) throws BizException {
  //创建锁名称
    String lockName = generateInitWarningStatisticsLockName(areaId);

    RLock lock = redisClient.getLock(lockName);
    try {
      //尝试获取锁 (最多尝试10秒,获取到后15秒后释放锁)
      boolean isAcquireLock = lock.tryLock(10, 15, TimeUnit.SECONDS);
      if (!isAcquireLock) {
        logger.error("初始化消息统计 --- 获取锁失败 lockName = " + lockName);
        throw new BizException("系统异常");
      } else {

        try {
          //查询【告警统计】 (能够查询到最新的数据,因为默认隔离级别是read committed
          List<WarningStatisticsPO> warningStatisticsPOS = warningStatisticsDAO.selectByArea(areaId);
          if (CollectionUtils.isEmpty(warningStatisticsPOS)) {
            //如果部门不存在告警统计,才进行初始化  initWarningStatistics()会开启一个新事务
            warningStatisticsService.initWarningStatistics(areaId);
          }
        } finally {
          //释放锁 (在事务提交后才释放锁。保证其它事务在获取锁后能查询到数据,不会再进行初始化。)
          lock.unlock();
        }

      }
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }

到此这篇关于redission分布式锁防止重复初始化问题的文章就介绍到这了,更多相关redission分布式锁内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Redis中Lua脚本的应用和实践

    详解Redis中Lua脚本的应用和实践

    这篇文章主要介绍了详解Redis中Lua脚本的应用和实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 深入理解Redis内存淘汰策略

    深入理解Redis内存淘汰策略

    本文主要介绍了深入理解Redis内存淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Redis过期键与内存淘汰策略深入分析讲解

    Redis过期键与内存淘汰策略深入分析讲解

    因为redis数据是基于内存的,然而内存是非常宝贵的资源,然后我们就会对一些不常用或者只用一次的数据进行存活时间设置,这样才能提高内存的使用效率,下面这篇文章主要给大家介绍了关于Redis中过期键与内存淘汰策略,需要的朋友可以参考下
    2022-11-11
  • Redis如何设置过期时间

    Redis如何设置过期时间

    这篇文章主要介绍了Redis如何设置过期时间问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • SpringBoot 集成Redis 过程

    SpringBoot 集成Redis 过程

    redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。本文给大家介绍SpringBoot 集成Redis 过程,感兴趣的朋友一起看看吧
    2021-06-06
  • CentOS 6.5 64位下安装Redis3.0.2的具体步骤

    CentOS 6.5 64位下安装Redis3.0.2的具体步骤

    这篇文章主要介绍了CentOS 6.5 64位下安装Redis3.0.2的具体步骤,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • 浅谈redis内存数据的持久化方式

    浅谈redis内存数据的持久化方式

    这篇文章主要介绍了浅谈redis内存数据的持久化方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Redis的几种数据类型使用详解

    Redis的几种数据类型使用详解

    这篇文章主要介绍了Redis的几种数据类型使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • NestJS+Redis实现手写一个限流器

    NestJS+Redis实现手写一个限流器

    限流是大型系统必备的保护措施,本文将结合redis , lua 脚本 以及 Nestjs Guard 来实现 限流的效果,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • 浅谈Redis缓冲区机制

    浅谈Redis缓冲区机制

    本文主要介绍浅谈Redis缓冲区机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论