Spring Boot2.x 整合lettuce redis 和 redisson

2023-11-13

前言

springboot2之前redis的连接池为jedis,2.0以后redis的连接池改为了lettuce,lettuce能够支持redis4,需要java8及以上。
lettuce是基于netty实现的与redis进行同步和异步的通信。

lettuce和jedis比较:jedis使直接连接redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个jedis实例增加物理连接 ; lettuce的连接是基于Netty的,连接实例(StatefulRedisConnection)可以在多个线程间并发访问,StatefulRedisConnection是线程安全的,所以一个连接实例可以满足多线程环境下的并发访问,当然这也是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。

Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。

整合lettuce

		<!--spring session-->
		<dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-data-redis</artifactId>
			<version>2.0.5.RELEASE</version>
		</dependency>

RedisAutoConfiguration完成了对JedisConnectionFactory和LettuceConnectionFactory的自动配置。同时

RedisProperties封装了redis配置

application.yml

#jedis客户端配置
spring:
    redis:
        cluster:
          nodes:
            - 192.168.56.128:7000
            - 192.168.56.128:7001
            - 192.168.56.128:7002
        # Redis默认情况下有16个分片,配置具体使用的分片,默认为0
        database: 0
        lettuce:
          pool:
            # 连接池最大连接数 默认8 ,负数表示没有限制
            max-active: 8
            # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1
            max-wait: -1
            # 连接池中的最大空闲连接 默认8
            max-idle: 8
            # 连接池中的最小空闲连接 默认0
            min-idle: 0

构建一个带有@Configuration配置文件,在spring boot 启动时会自动扫描并注册bean

@Configuration
public class App {
    /**
     * springboot2.x 使用LettuceConnectionFactory 代替 RedisConnectionFactory
     * 在application.yml配置基本信息后,springboot2.x  RedisAutoConfiguration能够自动装配 LettuceConnectionFactory 和 RedisConnectionFactory 及其 RedisTemplate
     * @param redisConnectionFactory
     * @return
     */
    @Bean
    public RedisTemplate redisTemplate(LettuceConnectionFactory redisConnectionFactory){
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //配置序列化方式
         redisTemplate.setKeySerializer(new StringRedisSerializer());
        //使用fastjson 代替 GenericJackson2JsonRedisSerializer
        redisTemplate.setValueSerializer(new GenericFastJsonRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new GenericFastJsonRedisSerializer());
        return redisTemplate;
    }

}

整合Redisson

<!--redisson客户端-->
		<dependency>
			<groupId>org.redisson</groupId>
			<artifactId>redisson</artifactId>
			<version>3.7.5</version>
		</dependency>

单独构建一个 redisson.yml 放在项目跟目录(和application.yml同级)

clusterServersConfig:
  # 连接空闲超时 如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。
  idleConnectionTimeout: 10000
  pingTimeout: 1000
  # 连接超时
  connectTimeout: 10000
  # 命令等待超时
  timeout: 3000
  # 命令失败重试次数
  retryAttempts: 3
  # 命令重试发送时间间隔
  retryInterval: 1500
  # 重新连接时间间隔
  reconnectionTimeout: 3000
  # failedAttempts
  failedAttempts: 3
  # 密码
  password: null
  # 单个连接最大订阅数量
  subscriptionsPerConnection: 5
  # 客户端名称
  clientName: null
  #负载均衡算法类的选择  默认轮询调度算法RoundRobinLoadBalancer
  loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
  slaveSubscriptionConnectionMinimumIdleSize: 1
  slaveSubscriptionConnectionPoolSize: 50
  # 从节点最小空闲连接数
  slaveConnectionMinimumIdleSize: 32
  # 从节点连接池大小
  slaveConnectionPoolSize: 64
  # 主节点最小空闲连接数
  masterConnectionMinimumIdleSize: 32
  # 主节点连接池大小
  masterConnectionPoolSize: 64
  # 只在从服务节点里读取
  readMode: "SLAVE"
  # 主节点信息
  nodeAddresses:
  - "redis://192.168.56.128:7000"
  - "redis://192.168.56.128:7001"
  - "redis://192.168.56.128:7002"
  #集群扫描间隔时间 单位毫秒
  scanInterval: 1000
threads: 0
nettyThreads: 0
codec: !<org.redisson.codec.JsonJacksonCodec> {}

配置Redisson客户端的bean (redisson 默认的编码类为 Jackson Json)

@Configuration
public class App {
   /**
     * redisson客户端
     * @return
     * @throws IOException
     */
    @Bean(destroyMethod = "shutdown")
    public RedissonClient redissonClient() throws IOException{
        Config config = Config.fromYAML(new ClassPathResource("redisson.yml").getInputStream());
        return Redisson.create(config);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot2.x 整合lettuce redis 和 redisson 的相关文章

  • 即使增加超时后,stackexchange.redis 也会抛出超时?

    尝试从缓存中删除时出现以下错误 Timeout performing DEL test com inst 0 mgr ExecuteSelect err never queue 0 qu 0 qs 0 qc 0 wr 0 wq 0 in 0
  • ServiceStack:手动调用服务时恢复管道?

    作为后续这个问题 https stackoverflow com questions 64560997 servicestack messaging api can it make a broadcast 我想了解如何改进我对服务的手动调用
  • 是否可以使用带有 FUSE 文件系统的 Linux VFS 缓存?

    默认情况下 Linux VFS 缓存似乎不适用于 FUSE 文件系统 例如 read 调用似乎被系统地转发到 FUSE 文件系统 我在 FUSE 特定的远程文件系统上工作 我需要一个非常积极的缓存 我需要实现自己的页面缓存吗 或者是否可以为
  • StackExchange.Redis 和 StackExchange.Redis.StrongName 之间有什么区别?

    当我关注Azure时文档 http azure microsoft com en us documentation articles cache dotnet how to use azure redis cache 关于如何在Azure
  • 如何在redis中创建自己的数据库?

    There are 0 to 15 databases in redis 我想使用 redis cli 创建自己的数据库 有什么命令可以实现吗 Redis 数据库并不等同于 MySQL 等 DBMS 中的数据库名称 这是一种为键创建隔离和命
  • 使用brew在MacOSx上安装Redis JSON

    如何使用brew 在 macOSx 上安装 RedisJSON 如何在不编译redis的情况下启用redis上的模块 我不想使用 docker 客户端 Redis Stack 可能是最简单的方法 它不仅仅是 RedisJSON 还包括 Re
  • Laravel - 缓存 Eloquent 并频繁更新

    是否可以对经常修改的对象使用缓存 例如 假设我们有一个 BlogPost 对象 并且有一个经常更改的 num of views 列 以及其他列 是否可以更新缓存和数据库中的 num of views 字段 而不破坏缓存对象并重新创建它 我可
  • Spring RedisTemplate:8次调用后方法键挂起

    我使用 Spring RedisTemplate spring data redis 1 7 1 与 Redis 进行通信 我需要通过正则表达式获取然后删除键 例如 context user1 我用的方法 RedisTemplate key
  • 我的 Redis 自动生成的密钥

    我不知道我的 Redis 版本 4 0 9 到底发生了什么 我正在运行一个应用程序并使用 Redis 来存储我的数据库 但是 然后 Redis 自动创建 3 个新键 Backup1 Backup2 Backup3 并删除我的所有数据 这是我
  • 为什么Redis中不建议使用KEYS?

    在Redis中 建议不要使用按键命令 https redis io commands KEYS 为什么会这样呢 是因为它的时间复杂度是 O N 吗 或者是别的什么原因 我做了下面的实验来证明KEYS命令有多么危险 当带有 KEYS 的一个命
  • 如何在节点redis客户端上设置读取超时?

    在 github 上我没有看到读取超时的选项 https github com NodeRedis node redis https github com NodeRedis node redis There s connect timeo
  • 如何设置 Celery 以通过 ssl 与 Azure Redis 实例对话

    使用 的伟大答案 如何在microsoft azure上的django项目中配置celery redis https stackoverflow com questions 39616701 how to configure celery
  • 库存管理系统的 SQL 与 NoSQL

    我正在开发一个基于 JAVA 的网络应用程序 主要目的是拥有在多个称为渠道的网站上销售的产品的库存 我们将担任所有这些渠道的管理者 我们需要的是 用于管理每个渠道的库存更新的队列 库存表 其中包含每个通道上分配的正确快照 将会话 ID 和其
  • 如何将 ActionController::Live 与 Resque + Redis 一起使用(用于聊天应用程序)

    我正在尝试为我的 Rails 应用程序构建聊天功能 我在用ActionController Live Puma Resque Redis为了这 所以基本上在这种情况下 redissubscribe方法正在后台运行 使用resque 到目前为
  • 如何测试我的 Redis 缓存是否正常工作?

    我已经安装了 django redis cache 和 redis py 我遵循了 Django 的缓存文档 据我所知 以下设置就是我所需要的 但我如何判断它是否正常工作 设置 py CACHES default BACKEND redis
  • 无法启动redis.service:单元redis-server.service被屏蔽

    我在 ubuntu 16 04 上安装了 Redis 服务器 但是当我尝试使用启动redis服务时 sudo systemctl start redis 我收到消息 Failed to start redis service Unit re
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • 如何在Redis中进行持久化存储?

    关闭redis服务器后 使用set存储的值被破坏 在这里我找到了使用持久性存储的方法 有人帮助我 如何使用javascript实现这一点 我想将客户端的一些值存储在 redis 数据库中 并且必须在其他客户端中使用该值 您需要配置 Redi
  • Java 将字节转换为二进制安全字符串

    我有一些以字节为单位的数据 我想将它们放入Redis中 但是Redis只接受二进制安全字符串 而我的数据有一些二进制非安全字节 那么如何将这些字节转换为二进制安全字符串以便将它们保存到 Redis 中呢 Base64 对我有用 但它使数据更
  • 有没有办法让特定的key在集群模式下定位到特定的redis实例上?

    我想让我的多锁位于不同的redis实例上 我发现redission可以指定一个实例来执行命令 但是如果该命令与key相关 则指定的实例会将命令传输到另一个实例 你能给我一些建议吗 你可以 但这并不是微不足道的 首先 Redis 在键中使用大

随机推荐

  • win7下安装rhel7(redhat enterprise Linux 7) 双系统

    首先需要的材料是 win7 rhel7 ISO镜像 和 EasyBCD 然后将磁盘格出3个分区 卷标分别是 I RHEL7 J GEN 和K SWAP 要注意格出来的三个分区都是FAT32格式的 NTFS Linux不认 我分的大小是I 1
  • 如何使用万用表测量三级管的阻值

    1 三极管是含有两个PN结的半导体器件 根据两个PN结连接方式不同 可以分为NPN型和PNP型两种不同导电类型的三极管 测试三极管要使用万用电表的欧姆挡 并选择R 100或R 1k挡位 假定我们并不知道被测三极管是NPN型还是PNP型 也分
  • 你现在需要知道的 C# 10 的 5+1 特性

    距离 C 10 正式发布仅剩两个月 微软开启了关于其 C 语言第十版的新特性和功能的讨论 这些增强功能是在C 10 0 Preview 7 中宣布的 微软将在下一版 C 10 中实现的功能和改进如下 记录类型可以密封 ToString 现在
  • ES底层原理知识(无代码篇)

    版本更新知识 ES 删除映射类型 爱码网 1 Index索引 包含了一堆有相似数据结构的文档数据 一个索引包含很多document 一个索引就代表一类相似或者相同的document 索引简单来说就相对于关系型数据库的库 2 Type类型 每
  • 小程序-picker组件的使用、数据回显

    picker组件的使用 通过点击picker选择器 触发bingchange绑定的事件函数 在picker组件自定义data i I 在事件函数中通过e target dataset i获取到data i里的值 这里的i代表数组中对象的下标
  • 09_Uboot启动流程_1

    目录 链接脚本u boot lds详解 U Boot启动流程详解 reset函数源码详解 lowlevel init函数详解 s init函数详解 链接脚本u boot lds详解 要分析uboot的启动流程 首先要找到 入口 找到第一行程
  • ABAP 基础语法

    表的声明的格式为 tables 表名 变量定义 其中 v1是变量名 l 是变量的长度 t是数据类型 d是小数位 xxx 是缺省值 data v1 l type t decimals d value xxx 定义了一个10位长度3位小数缺省值
  • 多年收集的一些稀有软件1

    QQ 365543212 PTC系列产品 PTC Creo 5 0 1 0 HelpCenter Full Multilanguage Win64 2DVD PTC Creo 4 0 M050 HelpCenter Full Multila
  • mysql 锁级别说明 一

    1 锁的类型 MySQL各存储引擎使用了三种类型 级别 的锁定机制 表级锁定 行级锁定和页级锁定 锁级别 存储引擎 表级别 table level MyISAM MEMORY CSV 行级别 row level inndb 页级别 page
  • Docker Compose初体验(Centos7中docker-compose安装MySQL+Redis)

    一 docker compose介绍 官网介绍 Compose 是用于定义和运行多容器 Docker 应用程序的工具 通过 Compose 您可以使用 YML 文件来配置应用程序需要的所有服务 然后 使用一个命令 就可以从 YML 文件配置
  • 为什么说 Serverless 是云的未来?

    简介 对于大多数应用而言 借助 Serverless 服务 开发者可以将绝大多数精力投入在业务逻辑的开发整合上 大大缩短开发周期 降低运维成本 有人说 Serverless 正在改变未来软件开发的模式和流程 它就是云计算的未来 技术领域真正
  • Vue 生命周期和数据共享

    Vue 生命周期和数据共享 1 组件的生命周期 1 1 生命周期与生命周期函数 1 2 组件生命周期函数的分类 1 3 生命周期图示以及详解 2 组件之间的数据共享 2 1 组件之间的关系 2 2 父向子传值 2 3 子向父传值 2 4 兄
  • 降低指定进程的CPU占用率(适合游戏多开)

    应用场景举例 推荐BES软件 应用场景举例 游戏多开 比如 天书世界 网页游戏 单开占用CPU30 左右 最小化能够降低到10 以下 如果多开 那么CPU就是叠加累计 非常占用CPU资源 而且挂机严重影响CPU温度 1 采用最小化窗口的方式
  • CV综述目标检测整理---目录

    CV综述目标检测整理 目录 Object detection yolo系列 yolov3 从yolo入门目标检测 链接 YOLOV3论文解读与应用 https blog csdn net weixin 42466194 article de
  • codeforces 733D--Kostya the Sculptor

    Description Kostya is a genial sculptor he has an idea to carve a marble sculpture in the shape of a sphere Kostya has a
  • 威胁情报

    2020 05 01 引言 之前总是看到各种威胁情报 各种乱七八糟的定义 各种什么高级的词汇 什么上下文 什么攻击 统统看不懂 但是你去搜索威胁情报 国内几家比较知名的 或者说国外的 发现他们的网站提供的服务 就是IP 域名 文件检测这些内
  • MyEclipse报错:Multiple markers at this line

    Multiple markers at this line The type java io ObjectInputStream cannot be resolved It is indire 出错原因 jdk版本太高 不兼容而引起的问题
  • 大数据好不好学,有这几大步骤你就懂了

    很多初学者在萌生向大数据方向发展的想法之后 不免产生一些疑问 应该怎样入门 应该学习哪些技术 学习路线又是什么 所有萌生入行的想法与想要学习Java的同学的初衷是一样的 岗位非常火 就业薪资比较高 前景非常可观 基本都是这个原因而向往大数据
  • 安卓逆向入门指南:修改与重打包应用

    安卓逆向入门指南 修改与重打包应用 概述 介绍修改与重打包应用的目的和应用场景 强调合法性和道德准则 在逆向工程过程中需要遵守相关法律法规 理解应用结构与资源 APK文件结构 解释APK文件的基本结构 包括AndroidManifest x
  • Spring Boot2.x 整合lettuce redis 和 redisson

    前言 springboot2之前redis的连接池为jedis 2 0以后redis的连接池改为了lettuce lettuce能够支持redis4 需要java8及以上 lettuce是基于netty实现的与redis进行同步和异步的通信