多环境配置redission

线上用户登录突然失效?可能是你的Redission配置在搞鬼(排查实录) 本文深入分析了线上用户登录突然失效的问题,揭示了Redission配置中的常见陷阱。通过实际案例展示了如何排查和解决Redis数据库配置不一致导致的会话失效问题,提供了Redission正确配置模板和验证方法,帮助开发者避免类似故障。 阅读详情

背景了解

参考阅读
版本redisson-spring-boot-starter-3.13.6
RedissonAutoConfiguration初始化源码解析
https://blog.youkuaiyun.com/lizz861109/article/details/109289430

redisson-spring-boot-starter-3.13.6版本之前的老版本是只有config方式,此版本开始增加了file配置方式

@ConfigurationProperties(
    prefix = "spring.redis.redisson"
)
public class RedissonProperties {
    private String config;
    private String file;

    public RedissonProperties() {
    }

    public String getConfig() {
        return this.config;
    }

    public void setConfig(String config) {
        this.config = config;
    }
}

多环境配置redission

配置方式有多种
1.直接使用redission的Properties配置yml
2.使用spring的redis配置
3.从配置中心读取配置

直接使用redission的Properties配置

redisson-dev.yml
redisson-test.yml
redisson-uat.yml

import com.alibaba.cloud.nacos.NacosConfigProperties;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.spring.starter.RedissonProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ClassPathResource;

import javax.annotation.PostConstruct;
import java.io.IOException;
import java.util.Properties;


@Configuration
@RefreshScope
public class RedissonConfig {

    @Autowired
    private Environment env;

    @Autowired
    private NacosConfigProperties nacosConfigProperties;





    @Bean(destroyMethod = "shutdown")
    public RedissonClient redissonClient() throws IOException, NacosException {
        String[] profiles = env.getActiveProfiles();
        String profile = "";
        if(profiles.length > 0) {
            profile = "-" + profiles[0];
        }

       Config config = Config.fromYAML(new ClassPathResource("redisson" + profile + ".yml").getInputStream());
        RedissonClient redisson = Redisson.create(config);
        return redisson;
    }


}


从spring redis中配置

spring redis配置

spring:
  redis:
    cluster:
      nodes: 192.16.32.176:6371,192.16.32.176:6372
    database: 0
    password: password
    maxAttempts: 5
    timeout: 3000
    pool:
      maxActive: 300
      maxIdle: 100
      minIdle: 35
      max-wait: 4000
      maxWaitMillis: 3000
      test-on-borrow: true
      test-while-idle: true

自定义配置类

/**
*从spring redis中获取
 * redisson 配置类
 * @author jerry
 */
@Configuration
public class RedissonConfig implements EnvironmentAware {

  private static final String PREFIX = "redis://";
  private static final String HOST_KEY = "spring.redis.host";
  private static final String PORT_KEY = "spring.redis.port";
  private static final String CLUSTER_KEY = "spring.redis.cluster.nodes";
  private static final String PASSWORD_KEY = "spring.redis.password";

  private Environment environment;

  @Bean
  public RedissonClient getRedisson() {

    String host = environment.getProperty(HOST_KEY);
    String password = environment.getProperty(PASSWORD_KEY);
    Config config = new Config();

    if (!StringUtils.isEmpty(host)) {
      String port = environment.getProperty(PORT_KEY);
      if (StringUtils.isEmpty(port)) {
        throw new IllegalArgumentException("[getRedisson] port is null.");
      }
      config.useSingleServer().setAddress(PREFIX + host + ":" + port);
      if (!StringUtils.isEmpty(password)) {
        config.useSingleServer().setPassword(password);
      }
    } else {
      String cluster = environment.getProperty(CLUSTER_KEY);
      if (StringUtils.isEmpty(cluster)) {
        throw new IllegalArgumentException("[getRedisson] cluster is null.");
      }
      String[] nodes = cluster.split(",");
      for (int i = 0; i < nodes.length; i++) {
        nodes[i] = PREFIX + nodes[i];
      }
      config.useClusterServers().setScanInterval(2000).addNodeAddress(nodes);
      if (!StringUtils.isEmpty(password)) {
        config.useClusterServers().setPassword(password);
      }
    }

    return Redisson.create(config);
  }

  @Override
  public void setEnvironment(Environment environment) {
    this.environment = environment;
  }
}

nacos中读取配置


	@Autowired
    private RedissonProperties redssionProperties;

    @Bean(destroyMethod = "shutdown")
    public RedissonClient redissonClient() throws IOException, NacosException {

        Properties properties = new Properties();
        // nacos服务器地址,127.0.0.1:8848
        properties.put(PropertyKeyConst.SERVER_ADDR, nacosConfigProperties.getServerAddr());
        // 配置中心的命名空间id
        properties.put(PropertyKeyConst.NAMESPACE, nacosConfigProperties.getNamespace());
        ConfigService configService = NacosFactory.createConfigService(properties);
        // 根据dataId、group定位到具体配置文件,获取其内容. 方法中的三个参数分别是: dataId, group, 超时时间
        String content = configService.getConfig(redssionProperties.getConfig(), nacosConfigProperties.getGroup(), 3000L);
        // 因为我的配置内容是JSON数组字符串,这里将字符串转为JSON数组
        System.out.println(content);
        Config config = Config.fromYAML(content);
        RedissonClient redisson = Redisson.create(config);
        return redisson;
    }

spring:
	redis:
    	redisson: redisson.yml

在nacos中增加配置redisson.yml

SpringBoot整合Redisson 个人博客纯净版 SpringBoot整合Redisson | 代码搬运工 Redisson简介 Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。充分的利用了Redis键值数据库提供的一系列优势,基于Java实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步 阅读详情

相关推荐

Spring集成Redisson配置RedissonAutoConfiguration初始化源码解析

Redisson数据源初始化源码 ,当前版本3.13.6 /** * Copyright (c) 2013-2020 Nikita Koksharov * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License

进击的小白 1万+

redis 基于 redisson 的分布式锁

以前在开发项目的时候,一般使用自己基于 lua 脚本实现的 redis 锁,最近对分布式所深入了解了一下,才发现这样实现是有很大的问题的,比如说,如果线程执行时间过长,在锁释放之后还没有执行完成怎么办呢 最近又发现了一个比较好的 redis 的框架 redisson 这里面实现了 Watch Dog 自动延期功能,在这里记录一下,以便以后查阅 一、添加 redisson 配置 引入依赖: <dependency> <groupId>org.redisson</gro

qq_35530330的博客 530

记录redisson实现redis分布式事务锁

自己封装redisson方法,同时通过注解的方式加入redis分布式事务锁,可靠。

Redission的基本使用

Redission的基本使用 比如现在有一个电商网站,由于商城的访问人数越来越多,最高访问人数达到了每秒1万请求,导致用户在商城首页中等待的时间越来越长,使用jemter 测试的吞吐量很低,我们需要考虑优化首页。 假设我们现在已经使用nginx进行了静态分离,给数据库添加了索引,调大了jvm的内存,现在需要考虑是否缓存首页数据,因为我们首页的分类菜单很少改变,却请求很多,可以把数据库缓存到redis中。 引用依赖,编写配置,基本使用 ...

weixin_47765791的博客 1万+

NVIDIA DGX Spark 开发环境深度配置与优化指南

定期系统维护每月执行一次完整的系统更新监控存储空间使用情况,及时清理临时文件定期检查硬件健康状况开发习惯优化使用tmux或screen管理长时间运行的任务配置自动化测试和代码质量检查建立完善的项目文档体系性能调优周期每月重新评估和调整系统参数根据工作负载特点优化容器配置持续监控和记录性能指标DGX Spark作为一个强大的AI开发平台,其真正的价值需要通过精细的环境配置和优化才能充分发挥。本文提供的配置方案和建议均基于实际生产环境经验,旨在帮助开发者构建稳定、高效、可维护的开发环境。

time_days的博客 3683

零基础用AHK操作Excel:从数据读取到自动填写(附完整脚本解析)

本文为零基础用户详细介绍了如何使用AutoHotkey(AHK)通过COM接口高效操作Excel,实现从数据自动读取到填写的完整自动化流程。文章包含完整的脚本解析、环境搭建指南、核心代码逐行讲解以及实际应用案例,帮助办公人员大幅提升数据处理效率,告别重复劳动。

weixin_29202213的博客 552

Redisson连接池配置优化:解决Redis连接初始化不足问题

在使用Redisson客户端连接Redis集群时,开发者可能会遇到"Unable to init enough connections amount"的错误提示。这个问题的核心在于Redis服务端的连接数限制与Redisson客户端的连接池配置不匹配。 ## 问题现象分析 当Redisson尝试建立与Redis集群的连接时,日志显示"Unable to init enough connecti...

gitblog_01026的博客 522

STM32L476低功耗实战:LPTIM精准定时唤醒STOP2模式与系统级功耗优化

本文深入探讨了STM32L476低功耗实战技巧,重点解析了LPTIM精准定时唤醒STOP2模式的配置与优化。通过详细的步骤指南和实战经验分享,帮助开发者实现系统级功耗优化,特别适合电池供电设备开发。文章涵盖LPTIM1定时器配置、STOP2模式进入流程及常见问题排查,助力将整机功耗降至8.2uA级别。

weixin_33686714的博客 435

SpringBoot+Vue实现高并发选课系统设计与优化

在校园信息化建设中,教务管理系统的高并发处理能力是关键挑战。通过分布式锁与乐观锁机制可有效解决资源竞争问题,保障数据一致性。SpringBoot框架凭借自动配置和嵌入式容器特性,配合Vue的组件化开发,能快速构建响应式Web应用。MySQL事务机制和Redis缓存则共同支撑高并发场景下的系统稳定性。本文以选课系统为例,详细解析了如何利用Redission分布式锁防止超卖,以及通过Elasticsearch优化课程检索性能的工程实践,为教育类系统开发提供可复用的技术方案。

weixin_30652897的博客 361

【Stata双重差分模型】双重差分DID的具体操作步骤

本案例将详细阐述如何使用双重差分法进行实证分析,并展示具体的STATA操作代码。

a519573917的博客 2万+

当拿到金葡菌的全基因组测序数据后该怎样进行分析呢

很多做科研实验/做课题报告的科研老师们在拿到全基因组测序数据之后要进行一系列的分析,但同时也担心数据庞大分析缓慢导致进度,也有因为不会编程不知道该如何进行拼接分析的...其实需要质控拼接、MLST分析及菌种鉴定等完全可以自己在平台上进行分析,下面以金葡菌为例进行了质控拼接及菌种鉴定等分析。 网络图片(侵删) 金黄色葡萄球菌(Staphylococcus aureus,S. aureus)也称“金葡菌”,隶属于葡萄球菌 属,是革兰氏阳性菌的代表,为一种常见的食源性致病微生物。 那么在取得了金葡菌全基

GenesClouds的博客 1967

Redisson客户端配置与缓存管理器

Redisson客户端配置与缓存管理器

m0_51935008的博客 4472

基于OpenCV的驾驶疲劳检测与预警系统设计

PERCLOS(Percentage of Eye Closure)是一种基于眼睑闭合程度的疲劳度量指标。在基于OpenCV的驾驶疲劳检测与预警系统设计中,PERCLOS可以用于检测驾驶员的眼睑闭合程度,以判断其是否疲劳。该函数用于检测视频流中人脸的疲劳程度。具体地,该函数通过检测人脸的眼睛和嘴巴的状态来评估人脸的疲劳程度。眼睛状态是通过计算眼睛的长宽比(eyear)来判断,如果长宽比小于某个阈值,则认为眼睛闭合,表示人处于疲劳状态。

2301_79810943的博客 2326

Redisson集成到nacos配置中心的问题

因为微服务项目都需要用到redisson,所以就想着将配置提取出来放到nacos上作为共享配置使用,nacos显示已经加载配置文件了,但项目启动后却没有起作用,本地使用的配置是有作用的。使用 |+ 可以保留整段文本最后的所有换行符,使用 |- 可以删除整段文本最后的所有换行符。nacos加载配置文件的时候会进行处理,将文件压缩成一行,一般没问题,但是redisson的配置中会出现一些特殊配置项,比如。这个配置文件看上去没有任何问题,能加载也能读取相关变量,但是就是不能被redisson使用。

hou11122的博客 2588

OpenCV-Python实战(1)——OpenCV简介与图像处理基础

OpenCV 是一个的跨平台计算机视觉库,可以运行在 Linux、Windows 和 Mac OS 操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时也提供了 Python 接口,实现了图像处理和计算机视觉方面的很多通用算法。在本文中,将介绍 OpenCV 库,包括它的主要模块和典型应用场景,同时使用 OpenCV-Python 实战讲解图像处理基础要点。

盼小辉丶的博客 27万+

【网络与爬虫 61】移动端App爬虫终极指南:Android-iOS应用数据提取黑科技全解析

本文全面解析移动端App爬虫技术,涵盖Android和iOS两大平台的数据提取方法。从基础的网络抓包到高级的代码注入,从自动化测试框架到反调试技术绕过,为开发者提供移动端数据采集的完整解决方案和实战经验。

熵数实验室 3022

基于Redission实现分布式锁(注解版)

起两个或者更多的服务实例,操作同一个数据库(比如扣库存),然后通过nginx将这些服务实例进行负载均衡配置,通过jmeter或者其他压力测试工具实现并发访问,比较Service方法上加@Dislock和不加的区别。我们想通过注解方式无感实现分布式锁,必须要用到AOP的功能,而且是环绕通知(有do 有 return)生成lockKey,保证锁定资源的唯一性,并且只能解锁自己加的锁。主要是将RedissonClient与Redis数据库关联起来。

长沙老码农 2422

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

redis springboot连接

1.pom.xml <dependencies> <!-- 操作redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-...

weixin_41415820的博客 229

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Redisson学习———学习redisson加载yaml配置信息

他们的不同点点在于redisson . config 后面的纯文本信息表达方式不同,分为yaml和json俩种表达方式。config 设置为String 类型 用于加载spring.redis.redisson下的纯文本配置。该类提供默认的config配置,并提供将各种类型的数据解析为config配置类的能力。以下redisson配置二选一即可,配置内容相同,展示格式不同而已。

种一颗十年前的树 4714

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

redis集群配置和测试

一、在本机建立6个单REDIS节点,并以集群方式运行。 cluster-enabled yes # Every cluster node has a cluster configuration file. This file is not # intended to be edited by hand. It is created and updated by Redis nodes. # Every Redis Cluster node requires a different cluster

lipengyao2010的专栏 2646

SpringBoot Redission分布式锁

1.Redis连接配置 application.properties 配置文件中增加配置。 #1、单机模式 redisson.address=redis://10.7.5.16:6379 #redisson.password= 2. Redission属性配置 RedissonProperties.java 属性配置文件 package com.jeiker.redisson.config; import lombok.Data; import org.springframework.boot.con

jeikerxiao 432

Redission使用

【代码】Redission使用。

Linging_24的博客 858

springBoot 整合redisson实现消息订阅详细教程

springboot 整合redisson实现消息订阅

weixin_38982591的博客 1976

redisson配置类---SpringBoot集成、redis单机和集群模式配置

【代码】redisson配置类---SpringBoot集成、redis单机和集群模式配置。

Harden_zsc的博客 7650

Redis入门到精通(十一),Redission操作Redis

Redis入门到精通 专栏会分几期介绍Redis的概念操作,以及生产过程中频繁出现的一些问题及解决方案,在几期内逐渐深入带你全面了解Reids 本文为该专栏第十一期,主要介绍Redis的几种主流框架之Redisson............

weixin_62319133的博客 2万+

Redis分布式锁升级:RedLock+SpringBoot

分布式锁概览 在多线程的环境下,为了保证一个代码块在同一时间只能由一个线程访问,Java中我们一般可以使用synchronized语法和ReetrantLock去保证,这实际上是本地锁的方式。但是现在公司都是流行分布式架构,在分布式环境下,如何保证不同节点的线程同步执行呢?因此就引出了分布式锁,它是控制分布式系统之间互斥访问共享资源的一种方式。 在一个分布式系统中,多台机器上部署了多个服务,当客户端一个用户发起一个数据插入请求时,如果没有分布式锁机制保证,那么那多台机器上的多个服务可能进行并发插入操..

如果频繁就私信一下呢 1010
上一篇: springBoot中使用elasticjob
下一篇: rabbitMq延迟队列实现
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值