Springboot集成Jedis + Redisson

2023-11-13

以下转载文章经过本人亲测,具有可行性。

很好地解决了配置文件分环境部署,以及基本的redissonclient注入问题。

转载地址:https://my.oschina.net/devonking/blog/1421774

本文主要跟大家分享在Springboot中集成Jedis和Redisson的方法。为什么要集成两个redis客户端?那是因为它们各有所长也各有所缺,合在一起才能完善彼此。Jedis作为Redis客户端的java版实现实现了绝大部分的Redis原生功能,但是却没有对分布式线程控制做很好的支持。而Redisson是Redis官方推荐的支持分布式操作的Redis Java版客户端,但它却不支持一些基础的Redis原生功能,所以Jedis和Redisson只有整合到一起使用,才能更好的满足用户的需求。

接下来,分几个步骤分享给大家如何在Springboot中集成Jedis和Redisson。

首先,通过start.spring.io生成一个支持redis的web项目

将生成的项目导入IDE,e.g., Intellij IDEA.

在pom文件中加入redisson依赖 (添加完后,可以做下Maven -> Reimport)

为每个环境创建一套配置文件

本地开发环境以-local结尾,测试环境以-test结尾,生产环境以-prod结尾。然后在application.yml配置文件中指定激活那个环境的配置文件

spring:
  application:
    name: demo
  profiles:
    active: '@profileActive@'

此处别忘了

在相应环境的application配置文件中添加相应的Redis配置(Redis服务做成了哨兵模式),比如,在application-local.yml加入

spring:
  redis:
    database: 0
    password: 12345678 #密码
    port: 6379
    timeout: 0
    pool:
      max-active: 8 #最大连接数
      max-idle: 8 #最大空闲连接数
      max-wait: -1 #最大等待时间
      min-idle: 0
    sentinel:
      master: master1
      nodes: 172.16.33.216:16001,172.16.33.216:16002
server:
  port: 9090

在相应环境的Redisson配置文件中加入Redisson的配置信息(配置来源Redisson官方,点击查看

---
sentinelServersConfig:
  idleConnectionTimeout: 10000
  pingTimeout: 1000
  connectTimeout: 10000
  timeout: 3000
  retryAttempts: 3
  retryInterval: 1500
  reconnectionTimeout: 3000
  failedAttempts: 3
  password: 12345678
  subscriptionsPerConnection: 5
  clientName: null
  loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
  slaveSubscriptionConnectionMinimumIdleSize: 1
  slaveSubscriptionConnectionPoolSize: 50
  slaveConnectionMinimumIdleSize: 10
  slaveConnectionPoolSize: 64
  masterConnectionMinimumIdleSize: 10
  masterConnectionPoolSize: 64
  readMode: "SLAVE"
  sentinelAddresses:
  - "redis://172.16.33.216:16001"
  - "redis://172.16.33.216:16002"
  masterName: "master1"
  database: 0
threads: 0
nettyThreads: 0
codec: !<org.redisson.codec.JsonJacksonCodec> {}
useLinuxNativeEpoll: false

配置文件配好后,还需要注册一个Springboot的启动类(DemoApplication.java)中注册一个RedissonClient Bean,方法如下:

@Autowired
private Environment env;

@Bean(destroyMethod = "shutdown")
public RedissonClient redissonClient() throws IOException {
	String[] profiles = env.getActiveProfiles();
	String profile = "";
	if(profiles.length > 0) {
		profile = "-" + profiles[0];
	}
	return Redisson.create(
			Config.fromYAML(new ClassPathResource("redisson" + profile + ".yml").getInputStream())
	);
}

Everything is ready. Now let's rock.

创建一个Controller类

@RestController
@RequestMapping("/demo")
public class DemoController {

    private static Logger logger = LoggerFactory.getLogger(DemoController.class);

    @Autowired
    private RedisTemplate<String, String> redisTemplate;
    @Autowired
    private RedissonClient redissonClient;

    @ResponseBody
    @RequestMapping("/lock")
    public String lock(@RequestParam("sid") String serverId) {
        Long counter = redisTemplate.opsForValue().increment("COUNTER", 1);
        RLock lock = redissonClient.getLock("TEST");
        try {
            lock.lock();
            logger.info("Request Thread - " + counter + "[" + serverId +"] locked and begun...");
            Thread.sleep(5000); // 5 sec
            logger.info("Request Thread - " + counter + "[" + serverId +"] ended successfully...");
        } catch (Exception ex) {
            logger.error("Error occurred");
        } finally {
            lock.unlock();
            logger.info("Request Thread - " + counter + "[" + serverId +"] unlocked...");
        }

        return "lock-" + counter + "[" + serverId +"]";
    }
}

Code 完成,启动程序,在浏览器中试一把先

最后,我们用Jmeter来简单测试一下

创建Test Plan

执行Test Plan

后台日志

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot集成Jedis + Redisson 的相关文章

随机推荐

  • msvcr120.dll错误的解决方法

    msvcr120 dll错误 今天本来想操作mysql的 当我把那些文件配置好准备安装mysql时 bin gt mysqld install 居然报了个msvcr120 dll错误 就去寻找这个问题解决方法 原来是在C 资源库里少了一个资
  • Acwing 2. 01背包问题

    f i j 表示从前i个物品选 总体积 lt j的所有选法中的最大值 注意 当j
  • JS设计模式

    目录 前言 单例设计模式 Command 命令模式 Constructor构造器模式 工厂模式Factory 发布订阅设计模式 publish subscribe 观察者模式 中介者模式 前言 JS设计模式是一种思想 更规范更合理的管理代码
  • R语言对苏州天气的分析及预测 温度篇

    温度篇 前面已经讲了苏州的天气特点 还是用相同的数据 做接下来的苏州气温特点的分析预测 是的预测在这里 首先看下2011年到2015年苏州整体的温度表现是什么样的 plot suzhou highestTemp type l col red
  • cherry-pick如何使用?

    多分支开发 然后从测试分支合并到生产分支 测试分支有些内容此次不上线 所以不能全量merge 此时该如何操作呢 这时候就需要使用git cherry pick 下面是阮一峰的教程http www ruanyifeng com blog 20
  • React基础讲解

    文章目录 前言 一 React是什么 二 如何使用 1 基于浏览器的模式 babel 代码如下 2 利用react 创建视图 3 JSX 4 插值表达式 代码示例 5 条件输出 输出数据类型 列表渲染 条件渲染 6 列表循环 基于自动化的集
  • 【C语言编程练习】使用循环,计算1至100的和

    题目 使用循环结构 计算从1加到100的和 题目分析 可以使用for while do while进行设计 1 for循环 使用for循环时 需要注意循环变量的值要从1到100 不要写成了i lt 100导致没加100 2 while循环
  • centos切换到root登录

    具体操作方法 1 在centos系统桌面下通过快捷键 Ctrl Alt T 打开终端命令行模式 2 在centos终端命令行模式下输入以下命令切换到root用户登录 su root 切换到root用户 3 登录过程中如果怎么输入密码都出错
  • glTF模型转3D Tiles

    将 glTF 模型转换为 3D Tiles 格式需要使用一些工具来完成 其中一种方法是使用 Cesium 的 3D Tiles 工具 Cesium 是一个开源的 3D 地球浏览器 它提供了一个命令行工具 可以将 glTF 模型转换为 3D
  • nginx压缩ttf文件 mine.types的作用

    最近在运维过程中 前端提到发现在linux上下载某ttl文件 字体文件 太大 传输过程比较慢 于是就想着使用nginx的gzip进行压缩 经过不断尝试 终于发现在nginx的配置目录 etc nginx mine types 文件中少了 f
  • 如何把C盘Program Files(x86)中的google文件删除

    1 打开任务管理器 杀掉google相关的所有进程 2 参考以下文章更改权限 29条消息 需要来自administrators的权限才能对此文件夹进行更改 欧晨eli的博客 CSDN博客 你需要来自计算机管理员的权限才能对此文件夹进行更改
  • Pytorch Pytorch+深度学习神经网络相关学习收获

    文章目录 一 基础知识 二 Pytorch 三 如何实现一个神经网络 四 pytorch的数据类型 五 常用结构 六 构造神经网络的相关知识 七 数据集处理 一 基础知识 机器学习 本质就是通过 数据 答案的数据集 经过机器学习的训练 得到
  • 第四章 分支结构程序设计(二)

    5 已有预处理命令和定义如下 define N 8 intx 2 z 1 double y 1 2 下述程序段正确的是 C A switch x case z x break case N gt 0 x break B switch x c
  • Anaconda常用命令汇总

    Conda是Anaconda中一个强大的包和环境管理工具 可以在Windows系统中的的Anaconda Prompt命令行使用 也可以在macOS或者Linux系统的终端窗口的命令行使用 本文简单介绍conda的一些常用命令命令 仅供参考
  • 基于ant.design4.3.1实现table的编辑

    以下内容其实是当时不太会的一种无可奈何之举 建议使用实现form table编辑校验新链接的方法更为恰当 实现效果如图所示 import React useState from react import Table Input InputN
  • C#登录的实现(权限)

    只要涉及到软件的使用 最根本的会存在有登录 通过个人唯一的标志性账户登入使用软件 可以存有每个人独有的数据信息 制作一款软件最基础的前端操作页面等一系列模块只是最基础的框架 通过独有账户信息进入可通过后台数据处理显示以及操作个人最高权限的信
  • ESP8266-NodeMCU网络服务器(一)- 数字时钟制作

    文章目录 效果 所需环境 实现步骤 原理 HTML JS代码 上传文件到闪存系统 上传程序 效果 所需环境 ESP8266 NodeMCU 开发板 以下简称NodeMCU ESP8266库 Arduino IDE 代码编写工具 无线 热点
  • 【机器视觉学习笔记】大津法/Otsu最大类间方差法 最佳阈值处理(C++)

    目录 概念 C 源码 OtsuThreshold 主函数 效果 完整源码 平台 Windows 10 20H2 Visual Studio 2015 OpenCV 4 5 3 本文所用源码修改自C opencv 图片二值化最佳阈值确定 大津
  • Objectiv-C学习笔记-XCode模拟命令行填入参数执行

    菜单 Product gt Edit Scheme 左边找到run xxx点击后在右边选择Arguments面板中就可以设置XCode在运行命令行app时模拟输参数 设置完成后再次run就会自动填入设置好的参数了
  • Springboot集成Jedis + Redisson

    以下转载文章经过本人亲测 具有可行性 很好地解决了配置文件分环境部署 以及基本的redissonclient注入问题 转载地址 https my oschina net devonking blog 1421774 本文主要跟大家分享在Sp