spring-boot-starter-data-redis应用详解

在这里插入图片描述


一、依赖引入与基础配置

  1. 添加依赖
    pom.xml 中引入 Spring Data Redis 的 Starter 依赖,默认使用 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 中配置 Redis 服务器信息及连接池参数:

    spring:redis:host: localhostport: 6379password: 123456  # 可选database: 0lettuce:pool:max-active: 16    # 最大活跃连接数max-idle: 8       # 最大空闲连接min-idle: 2       # 最小空闲连接max-wait: 5000ms  # 等待超时时间
    

二、核心功能与基本操作

  1. RedisTemplate 与序列化
    • 默认序列化问题:默认使用 JDK 序列化,存储二进制数据不可读。

    • 自定义序列化:改用 JSON 或字符串序列化:

    @Configuration
    public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setKeySerializer(RedisSerializer.string());template.setValueSerializer(new GenericJackson2JsonRedisSerializer());template.setConnectionFactory(factory);return template;}
    }
    
  2. 数据结构操作
    通过 RedisTemplate 支持多种 Redis 数据结构:
    • 字符串(String):

    redisTemplate.opsForValue().set("key", "value", 60, TimeUnit.SECONDS);  // 带过期时间
    String value = redisTemplate.opsForValue().get("key");
    

    • 哈希(Hash):

    redisTemplate.opsForHash().put("user:1001", "name", "Alice");
    Object name = redisTemplate.opsForHash().get("user:1001", "name");
    

    • 列表(List):

    redisTemplate.opsForList().rightPush("listKey", "item1");
    List<Object> items = redisTemplate.opsForList().range("listKey", 0, -1);
    

三、高级特性与优化

  1. 缓存管理
    • 启用缓存注解:通过 @EnableCaching@Cacheable 实现声明式缓存:

    @Cacheable(value = "userCache", key = "#id")
    public User getUserById(Long id) { ... }
    

    • 自定义缓存配置:指定 TTL(过期时间)和缓存条件。

  2. 事务与管道(Pipeline)
    • 事务操作:通过 SessionCallback 实现原子性操作:

    redisTemplate.execute(new SessionCallback<>() {@Overridepublic List<Object> execute(RedisOperations operations) {operations.multi();operations.opsForValue().set("key1", "value1");operations.opsForValue().set("key2", "value2");return operations.exec();}
    });
    

    • 管道批量操作:提升网络性能:

    redisTemplate.executePipelined((RedisCallback<Object>) connection -> {connection.stringCommands().set("key1".getBytes(), "value1".getBytes());connection.stringCommands().set("key2".getBytes(), "value2".getBytes());return null;
    });
    
  3. 异步与响应式编程
    • Lettuce 异步 API:非阻塞操作提升并发性能:

    RedisAsyncCommands<String, String> asyncCommands = lettuceConnection.async();
    RedisFuture<String> future = asyncCommands.get("key");
    future.thenAccept(System.out::println);
    

四、常见问题与解决方案

  1. 序列化不一致
    • 问题:默认 JDK 序列化导致存储数据不可读。

    • 解决:使用 StringRedisTemplate 或自定义 JSON 序列化。

  2. 连接池配置优化
    • 参数调优:根据并发量调整 max-activemax-idle,避免资源耗尽。

  3. 缓存穿透与雪崩
    • 穿透:缓存空值或布隆过滤器拦截非法请求。

    • 雪崩:分散过期时间或使用分布式锁。


五、生产环境建议

  1. 监控与诊断
    • 使用 Redis Desktop Manager 或 Prometheus 监控连接池状态与性能指标。

  2. 高可用部署
    • 结合 Redis Sentinel 或 Cluster 实现高可用。


总结

spring-boot-starter-data-redis 通过简化的配置和强大的 RedisTemplate 抽象,为开发者提供了高效的 Redis 集成方案。合理配置序列化与连接池参数,结合事务、管道等高级特性,可显著提升应用性能。对于大规模生产环境,建议进一步整合 Redis 集群与监控工具以实现高可用与稳定性。

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

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

相关文章

全能邮箱全能邮箱:实现邮件管理的自动化!

全能邮箱全能邮箱&#xff1a;实现邮件管理的自动化&#xff01; 全能邮箱全能邮箱的配置教程&#xff1f;如何注册烽火域名邮箱&#xff1f; 全能邮箱全能邮箱作为一种创新的邮件管理解决方案&#xff0c;正逐渐改变我们处理邮件的方式。蜂邮EDM将围绕全能邮箱全能邮箱&…

Real2Render2Real:无需动力学仿真或机器人硬件即可扩展机器人数据

25年5月来自UC Berkeley 和 TRI 的论文“Real2Render2Real: Scaling Robot Data Without Dynamics Simulation or Robot Hardware”。 扩展机器人学习需要大量且多样化的数据集。然而&#xff0c;现行的数据收集范式——人类遥操作——仍然成本高昂&#xff0c;且受到手动操作…

Cadence学习笔记之---PCB的布线与铺铜

目录 01 | 引 言 02 | 环境描述 03 | 布 线 04 | 铺 铜 05 | 总 结 01 | 引 言 在上一篇文章中介绍了Cadence元件放置和布局相关的操作方法和步骤&#xff0c;当完成全部的器件布局后&#xff0c;就可以进行下一步&#xff1b; 本篇文章主要介绍Cadence中布线和铺铜相关的…

redis-7.4.2 通过 systemd管理,rpmbuild spec文件参考

redis-7 和 redis 5 版本在配置为systemd 方式管理时&#xff0c;配置关于有些许区别&#xff0c;否则会报systemctl status redis 如下错误&#xff1a; redis.service: control process exited, codeexited status1 Failed to start Redis persistent key-value database. Un…

2025-05-26 什么是“AI 全栈”

AI全栈&#xff1a;模型 表示学习 向量库 API UI 一句话定义&#xff1a; ​ AI 全栈开发&#xff0c;是指开发者从原始文本/语音/图像开始&#xff0c;结合大模型能力&#xff0c;构建完整应用闭环的技术能力栈。 AI全栈应用的过程 AI应用 ≠ 一个GPT接口&#xff0c;…

康师傅的“价值战”答卷:一碗面的创新与担当

低价策略、口味雷同、营销跟风……方便面行业曾长期陷于同质化竞争的泥潭&#xff0c;不过近年来&#xff0c;行业竞争逻辑已悄然改变。 一方面来源于宏观环境的变化&#xff0c;想要在缩量市场下保住大盘&#xff0c;一定要保持逆向思维的能力&#xff0c;另一方面&#xff0…

高性能管线式HTTP请求

高性能管线式HTTP请求:原理、实现与实践 目录 高性能管线式HTTP请求:原理、实现与实践 1. HTTP管线化的原理与优势 1.1 HTTP管线化的基本概念 关键特性: 1.2 管线化的优势 1.3 管线化的挑战 2. 高性能管线式HTTP请求的实现方案 2.1 技术选型与工具 2.2 Java实现:…

传输线上的信号速度与阻抗无关,主要由频率决定

阻抗与传播速度无关 通过计算我们可以知道&#xff0c;导体流过电流时&#xff0c;电子实际上的速度只有1cm/s。是很慢的。 导线的电阻对传输线上信号的传播速度几乎没有任何影响。只在一些极端的情况下&#xff0c;互连的电阻才会影响信号的传播速度&#xff0c;并且这个影响…

YOLOv1 详解:单阶段目标检测算法的里程碑

在目标检测领域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;系列算法凭借其高效性和实用性&#xff0c;成为了行业内的明星算法。其中&#xff0c;YOLOv1 作为 YOLO 系列的开山之作&#xff0c;首次提出了单阶段目标检测的思想&#xff0c;彻底改变了目标检测算…

免费开源 PDF 阅读器 自带虚拟打印机功能 多格式兼容

各位办公小能手们&#xff0c;今天咱来聊聊一款超厉害的PDF工具——PDFLite&#xff01; 这PDFLite啊&#xff0c;那可是轻量级、免费又开源的好东西。它能干啥呢&#xff1f;主要就是能读PDF文件&#xff0c;还能转换文件格式&#xff0c;做基础的文档管理。下面咱就说说它的…

Mac Python 安装依赖出错 error: externally-managed-environment

Mac Python 使用 ip3 install -r requirements.txt 出错 This environment is externally managed ╰─> To install Python packages system-wide, try brew installxyz, where xyz is the package you are trying toinstall.If you wish to install a Python library th…

Windows11+WSL2+Ubuntu22 安装

1.首先要获得管理员权限 2.直接在电脑搜索栏搜索 “Turn Windows features on or off”, 勾选下面两个条目&#xff1a; Virtual Machine Platform 和 Windows Subsystem for Linux 3.重启电脑 4.电脑搜索栏搜索“Windows PowerShell”&#xff0c;运行下面命令设置WSL2为默…

解决 iTerm2 中 nvm 不生效的问题(Mac 环境)

解决 iTerm2 中 nvm 不生效的问题&#xff08;Mac 环境&#xff09; 标题 《为什么 iTerm2 无法使用 nvm&#xff1f;—— 解决 Mac 终端环境变量冲突指南》 问题描述 许多开发者在 Mac 上使用 nvm 管理 Node.js 版本时&#xff0c;发现&#xff1a; 原生终端&#xff1a;n…

React的单向数据绑定

文章目录 单项数据绑定通过onChange方法&#xff0c;实现双向数据绑定 单项数据绑定 在 Vue 中&#xff0c;可以通过 v-model 指令来实现双向数据绑定。但是&#xff0c;在 React 中并没有指令的概念&#xff0c;而且 React 默认不支持 双向数据绑定。 React 只支持&#xff…

AWS関連職種向け:日本語面接QA集

1. 自己紹介&#xff08;じこしょうかい&#xff09; Q&#xff1a;簡単に自己紹介をお願いします。 A&#xff1a; はい、〇〇と申します。これまで約4年間、主にAWSを基盤としたインフラ設計・構築・運用に従事してまいりました。VPCやEC2、RDS、S3などの基本サービスの設計…

AlphaCore GPU 物理仿真引擎内测邀请

AlphaCore 是 MooreThreads 研发的下一代 GPU 物理仿真引擎&#xff0c;为影视特效&#xff0c;游戏交互&#xff0c;数字孪生等领域&#xff0c;提供超高精度的仿真模拟。 申请试用​ 目前我们的Catalyst FX 还处于内部申请测试阶段&#xff0c;请发送邮件至 alphacoremthre…

鸿蒙OSUniApp 实现的日期选择器与时间选择器组件#三方框架 #Uniapp

UniApp 实现的日期选择器与时间选择器组件 在移动应用开发中&#xff0c;日期选择器和时间选择器是表单、预约、日程、打卡等场景中不可或缺的基础组件。一个好用的日期/时间选择器不仅能提升用户体验&#xff0c;还能有效减少输入错误。随着 HarmonyOS&#xff08;鸿蒙&#…

嵌入式开发STM32 -- 江协科技笔记

1.背景介绍及基础认知 8大输入输出 斯密特触发器&#xff1a;高于设定阈值输出高电平&#xff0c;低于设定阈值输出低电平 有关上拉输入、下拉输入、推挽输出、开漏输出、复用开漏输出、复用推挽输出以及浮空输入、模拟输入的区别 1、上拉输入&#xff1a;上拉就是把电位拉高…

RISC-V 开发板 MUSE Pi Pro RTSP 串流 CSI ov5647 摄像头

视频链接&#xff1a;RISC-V 开发板 MUSE Pi Pro RTSP 串流 CSI ov5647 摄像头_哔哩哔哩_bilibili RISC-V 开发板 MUSE Pi Pro RTSP 串流 CSI ov5647 摄像头 RTSP&#xff08;Real-Time Streaming Protocol&#xff0c;实时流传输协议&#xff09; 是一种基于文本的应用层协议&…

Python面试1

1. 解释型语言和编译型语言的区别 编译型语言&#xff1a; 将程序编译成二进制可执行程序&#xff08;C、C) 解释型语言&#xff1a; 将程序逐行解释运行&#xff08;python&#xff09; Java不是将源程序直接编译机器语言&#xff0c;而是编译成字节码文件&#xff0c;然后用…