当前位置: 首页 > article >正文

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.lryc.cn/news/2386234.html

相关文章:

  • 5060显卡驱动PyCUDA开发环境搭建
  • redis搭建最小的集群,3主3从
  • 《帝国时代1》游戏秘籍
  • 【sylar-webserver】10 HTTP模块
  • 攻略生成模块
  • 海康NVR录像回放SDK原始流转FLV视频流:基于Java的流媒体转码(无需安装第三方插件ffmpeg)
  • 深入理解设计模式:工厂模式、单例模式
  • 运维Linux之Ansible详解学习(更新中)
  • 深入浅出IIC协议 - 从总线原理到FPGA实战开发 -- 第三篇:Verilog实现I2C Master核
  • 网络世界的“变色龙“:动态IP如何重构你的数据旅程?
  • 进阶-自定义类型(结构体、位段、枚举、联合)
  • 5G 网络全场景注册方式深度解析:从信令交互到报文分析
  • ARM笔记-嵌入式系统基础
  • 一文讲透golang channel 的特点、原理及使用场景
  • upload-labs通关笔记-第19关文件上传之条件竞争
  • 第5章:任务间通信机制(IPC)全解析
  • CAPL自动化-诊断Demo工程
  • SVN被锁定解决svn is already locked
  • 【深度学习】1. 感知器,MLP, 梯度下降,激活函数,反向传播,链式法则
  • 云原生安全:网络协议TCP详解
  • 使用CentOS部署本地DeekSeek
  • Spring Boot与Eventuate Tram整合:构建可靠的事件驱动型分布式事务
  • Python:从脚本语言到工业级应用的传奇进化
  • 【排序算法】典型排序算法 Java实现
  • node.js如何实现双 Token + Cookie 存储 + 无感刷新机制
  • [DS]使用 Python 库中自带的数据集来实现上述 50 个数据分析和数据可视化程序的示例代码
  • 探索智能仓颉
  • Ubuntu 上开启 SSH 服务、禁用密码登录并仅允许密钥认证
  • LLMs之Qwen:《Qwen3 Technical Report》翻译与解读
  • springboot3 configuration