Lettuce与Springboot集成使用

news2025/4/6 2:13:32

一、Lettuce核心优势与Spring Boot集成背景

  1. Lettuce特性

    • 基于Netty的非阻塞I/O模型,支持同步/异步/响应式编程
    • 线程安全:共享单连接实现多线程并发操作,性能衰减低
    • 原生支持Redis集群、哨兵、主从架构,自动重连机制保障高可用
    • Spring Boot 2.x默认Redis客户端,替代Jedis
  2. 适用场景对比

    场景Lettuce适用性Jedis适用性
    高并发低延迟✅ 异步非阻塞,性能更优❌ 同步阻塞,连接池压力大
    分布式锁/数据结构需结合Redisson原生不支持
    简单CRUD操作✅ 内置序列化支持✅ 轻量易用

二、Spring Boot集成Lettuce全流程

1. 依赖配置
<!-- Spring Boot默认集成Lettuce -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 连接池支持(可选) -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>
2. 基础配置(application.yml)
spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password: yourpassword
    lettuce:
      pool:
        max-active: 20    # 最大连接数(高并发场景建议50+)
        max-idle: 10      # 最大空闲连接
        min-idle: 5       # 最小空闲连接(防突发流量)
        max-wait: 100ms   # 获取连接最大等待时间
3. 序列化定制(核心配置类)
@Configuration
public class RedisConfig {
    
    @Bean
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        
        // Key序列化
        template.setKeySerializer(new StringRedisSerializer());  
        // Value序列化为JSON
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());  
        return template;
    }
}

序列化方案对比

  • StringRedisSerializer:纯字符串操作
  • Jackson2JsonRedisSerializer:对象序列化(需无参构造)
  • JdkSerializationRedisSerializer:二进制存储(兼容性差)

三、高级功能实现

1. 哨兵/集群模式
# 哨兵模式配置
spring:
  redis:
    sentinel:
      master: mymaster     # 主节点名称
      nodes: 192.168.1.1:26379,192.168.1.2:26379
    lettuce:
      pool: 
        max-active: 30    # 集群需增大连接池
2. 读写分离(主从架构)

通过自定义LettuceClientConfigurationBuilder实现:

@Bean
public LettuceConnectionFactory redisConnectionFactory() {
    RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("master-host", 6379);
    LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
        .readFrom(ReadFrom.REPLICA_PREFERRED)  // 优先从副本读取
        .build();
    return new LettuceConnectionFactory(config, clientConfig);
}
3. 响应式编程(WebFlux集成)
@Bean
public ReactiveRedisTemplate<String, String> reactiveRedisTemplate(
    ReactiveRedisConnectionFactory factory) {
    return new ReactiveRedisTemplate<>(factory, RedisSerializationContext.string());
}

响应式操作示例:

reactiveTemplate.opsForValue().set("key", "value").subscribe();  // 非阻塞写入

四、性能优化策略

  1. 连接池调优

    • max-active:根据QPS计算(公式:QPS * avg_time)
    • min-idle:保持预热连接,应对突发流量
    • 禁用连接池:短连接场景可设置spring.redis.lettuce.pool.enabled=false
  2. 序列化优化

    • 避免JDK序列化(体积大且跨语言差),优先使用JSON或Protobuf
    • 大Value场景启用压缩:
      template.setValueSerializer(new CompressionRedisSerializer(new Jackson2JsonRedisSerializer<>(Object.class)));
      
  3. 批处理与Pipeline

    List<Object> results = redisTemplate.executePipelined((RedisCallback<Object>) connection -> {
        for (int i =0; i <1000; i++) {
            connection.stringCommands().set(("key"+i).getBytes(), value.getBytes());
        }
        return null;
    });
    

五、常见问题排查

  1. 连接泄漏

    • 现象:RedisConnectionFailureException: Cannot get Jedis connection
    • 解决:检查finally块是否关闭连接,或使用execute(SessionCallback)自动释放
  2. 序列化异常

    • 现象:SerializationException: Could not read JSON
    • 解决:确保实体类有无参构造器,或切换为GenericJackson2JsonRedisSerializer
  3. 高延迟

    • 启用慢查询日志:
      redis-cli config set slowlog-log-slower-than 5000  # 记录>5ms操作
      redis-cli slowlog get                              # 查看日志
      

六、扩展场景实践

  1. 分布式锁(Redisson整合)

    @Bean
    public RedissonClient redissonClient() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
        return Redisson.create(config);
    }
    // 使用示例
    RLock lock = redissonClient.getLock("myLock");
    lock.lock();
    try { /* 业务逻辑 */ } finally { lock.unlock(); }
    
  2. 多数据源配置
    创建多个RedisTemplate实例并指定不同连接工厂:

    @Bean(name = "secondaryTemplate")
    public RedisTemplate<String, Object> secondaryTemplate(
        @Qualifier("secondaryFactory") RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        return template;
    }
    

最佳实践总结

  1. 生产环境必配连接池(防连接风暴)
  2. ETL类作业启用Pipeline(提升吞吐量3-5倍)
  3. 监控指标:关注redis.commands的P99延迟与连接池活跃数
  4. 版本升级:Spring Boot 3.x需配合Lettuce 6.x+,支持RESP3协议

参考配置

代码示例与完整配置可参考:示例项目

Lettuce使用详解


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2328896.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《系统分析师-基础篇-1-6章总结》

第1章 绪论 系统分析师角色 职责&#xff1a;需求分析、系统设计、项目管理、技术协调。 能力要求&#xff1a;技术深度&#xff08;架构设计、开发方法&#xff09; 业务理解&#xff08;企业流程、行业知识&#xff09; 沟通能力。 系统开发生命周期 传统模型&#xf…

【YOLO系列(V5-V12)通用数据集-电梯内电动车检测数据集】

YOLO格式的电梯内电动车检测数据集&#xff0c;适用于YOLOv5-v11所有版本&#xff0c;可以用于本科毕设、发paper、做课设等等&#xff0c;有需要的在这里获取&#xff1a; 电梯内电动车检测数据集 数据集专栏地址&#xff1a;https://blog.csdn.net/qq_41304809/category_1290…

算法题(114):矩阵距离

审题&#xff1a; 本题需要我们找出所有0距离最近的1的曼哈顿距离 思路&#xff1a; 方法一&#xff1a;多源bfs 分析曼哈顿距离&#xff1a; 求法1&#xff1a;公式法&#xff0c;带入题目公式&#xff0c;利用|x1-x2||y1-y2|求出 求法2&#xff1a;曼哈顿距离就是最短距离 本…

0102-web架构网站搭建-基础入门-网络安全

文章目录 1. 常规2 站库分离3 前后端分离4 集成环境5 docker6 分配站结语 1. 常规 结构&#xff1a;源码数据都在同服务器 影响&#xff1a;无&#xff0c;常规安全测试手法 2 站库分离 结构&#xff1a;源码和数据库不在同服务器 存储&#xff1a;其他服务器上数据库或者…

Linux系统编程:进程管理、内存对比与树莓派应用

一、认识进程和线程&#xff0c;在Linux系统下查看系统中各进程的编号pid并终止一个进程pid 1.进程和线程 ​​进程​​&#xff1a;操作系统分配资源&#xff08;如内存、CPU时间片&#xff09;的基本单位。每个进程有独立的内存空间&#xff0c;进程间通信需要较复杂的机制…

ue5 仿鬼泣5魂类游戏角色和敌人没有碰撞

UE5系列文章目录 文章目录 UE5系列文章目录前言一、问题原因二、设置碰撞2.读入数据 总结 前言 ue5 仿鬼泣5魂类游戏角色和敌人没有碰撞 一、问题原因 在UE5中&#xff0c;角色和敌人没有碰撞可能是由多种原因导致的&#xff0c;以下是一些可能的原因及解决方法&#xff1a…

基于Flask的MBA考生成绩查询系统设计与实现

基于Flask的MBA考生成绩查询系统设计与实现 序言 2024年吉林大学MBA在职研究生考试成绩公布后&#xff0c;考生收到的成绩单为PDF格式文档。为方便考生快速查询个人成绩及排名信息&#xff0c;笔者基于Python Flask框架开发了本查询系统。该系统支持关键词模糊查询、序号范围…

DHCP之报文格式

字段说明&#xff1a; op (op code): 表示报文的类型&#xff0c;取值为 1 或 2&#xff0c;含义如下 1:客户端请求报 2:服务器响应报文 Secs (seconds):由客户端填充&#xff0c;表示从客户端开始获得 IP 地址或 IP 地址续借后所使用了的秒数&#xff0c;缺省值为 3600s。 F…

React 文件上传新玩法:Aliyun OSS 加持的智能上传组件

文件上传是前端开发中的“老朋友”&#xff0c;但如何让它既简单又强大&#xff0c;还能无缝对接云端存储&#xff1f;今天&#xff0c;我要带你认识一个超酷的 React 组件 AliUploader&#xff0c;它不仅支持拖拽上传、批量编辑和文件排序&#xff0c;还直接把文件传到 Aliyun…

群体智能优化算法-变色龙优化算法(Chameleon Swarm Algorithm, CSA,含Matlab源代码)

摘要 变色龙优化算法&#xff08;Chameleon Swarm Algorithm, CSA&#xff09;是一种受变色龙行为启发的群体智能优化算法。该算法模拟了变色龙在自然界中通过变换颜色来适应环境的能力&#xff0c;以此为基础&#xff0c;设计了一个适应性强、搜索能力广泛的优化算法。CSA 通…

使用 React 和 Konva 实现一个在线画板组件

文章目录 一、前言二、Konva.js 介绍三、创建 React 画板项目3.1 安装依赖3.2 创建 CanvasBoard 组件 四、增加画布控制功能4.1 清空画布4.2 撤销 & 重做功能 五、增加颜色和画笔大小选择5.1 选择颜色5.2 选择画笔大小 六、最终效果七、总结 一、前言 在线画板是许多应用&…

NVR接入录像回放平台EasyCVR视频系统守护舌尖上的安全,打造“明厨亮灶”云监管平台

一、方案背景 近年来&#xff0c;餐饮行业食品安全和卫生等问题频发&#xff0c;比如后厨卫生脏乱差等&#xff0c;持续引发关注&#xff0c;这些事情导致连锁反应&#xff0c;使其收益遭受损失。同时&#xff0c;给消费者造成了心理和生理上的伤害。 加强餐饮行业的监管成为…

Cribl 导入文件来检查pipeline 的设定规则(eval 等)

Cribl 导入文件来检查pipeline 的设定规则(eval 等) 从这个页面先下载,或者copy 内容来创建pipeline: Reducing Windows XML Events | Cribl Docs

一周学会Pandas2 Python数据处理与分析-Jupyter Notebook安装

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Jupyter (Project Jupyter | Home&#xff09;项目是一个非营利性开源项目&#xff0c;于2014年由IPython项目中诞生…

deepseek v3-0324 Markdown 编辑器 HTML

Markdown 编辑器 HTML 以下是一个美观的 Markdown 编辑器 HTML 页面&#xff0c;支持多种主题切换和实时预览功能&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&q…

视频设备轨迹回放平台EasyCVR如何搭建公共娱乐场所远程视频监控系统

一、背景介绍 由于KTV、酒吧、足疗店等服务场所人员流动频繁、环境复杂&#xff0c;一直是治安管理的重点区域。为有效打击 “黄赌毒”、打架斗殴、寻衅滋事等违法犯罪的活动&#xff0c;打造安全有序的娱乐消费环境&#xff0c;我国相关部门将加大对这类场所的清查与管控力度…

网络安全基础知识总结

什么是网络安全 采取必要措施&#xff0c;来防范对网络的攻击&#xff0c;侵入&#xff0c;干扰&#xff0c;破坏和非法使用&#xff0c;以及防范一些意外事故&#xff0c;使得网络处于稳定可靠运行的状态&#xff0c;保障网络数据的完整性、保密性、可用性的能力(CIA)。 举例…

【工具】在 Visual Studio 中使用 Dotfuscator 对“C# 类库(DLL)或应用程序(EXE)”进行混淆

在 Visual Studio 中使用 Dotfuscator 进行混淆 Dotfuscator 是 Visual Studio 自带的混淆工具&#xff08;Dotfuscator Community Edition&#xff0c;简称 CE&#xff09;。它可以混淆 C# 类库&#xff08;DLL&#xff09;或应用程序&#xff08;EXE&#xff09;&#xff0c…

积分赛——获取环境温度

设计要求 从DS18B20温度传感器上获取环境温度&#xff0c;并将其温度值显示到数码管上&#xff08;保留两位小数&#xff09;。 当“S4”定义为发送按键&#xff0c;按键S4按下时&#xff0c;串口向PC端发送当前采集的温度值&#xff1b; 串口发送格式&#xff1a; Temp:26.…

Xilinx系列FPGA实现HDMI2.1视频收发,支持8K@60Hz分辨率,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我已有的4K/8K视频处理解决方案我已有的FPGA图像处理方案 3、详细设计方案设计框图硬件设计架构本HDMI2.1性能参数8K视频输入源Video PHY ControllerHDMI 2.1 Receive…