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

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.xdnf.cn/news/561799.html

相关文章:

  • C# AI(Trae工具+claude3.5-sonnet) 写前后端
  • maven快速上手
  • AI练习:混合圆
  • 【优秀三方库研读】在 quill 开源库 LogMarcos.h 中知识点汇总及讲解
  • CVE-2018-1270源码分析与漏洞复现(spring-messaging 表达式注入)
  • Flask 路由装饰器:从 URL 到视图函数的优雅映射
  • 使用Terraform创建azure databrick
  • 每日算法 -【Swift 算法】寻找字符串中最长回文子串(三种经典解法全解析)
  • 【工具教程】图片识别内容改名,图片指定区域识别重命名,批量识别单据扫描件批量改名,基于WPF和腾讯OCR的实现方案
  • HTML5 Video (视频) 深入解析
  • WPF···
  • [Java实战]Spring Boot整合MinIO:分布式文件存储与管理实战(三十)
  • Taro Error: chunk common [mini-css-extract-plugin]
  • 单片机设计_四轴飞行器(STM32)
  • apache http client连接池实现原理
  • 网络学习-利用reactor实现http请求(六)
  • K个一组链表翻转
  • 【大前端】使用NodeJs HTTP模块创建web服务器、SSE通讯
  • 运维web服务器
  • Java—— IO流 第二期
  • 怎么把cursor(Cursor/ollama)安装到指定路径
  • 从 CANopen到 PROFINET:网关助力物流中心实现复杂的自动化升级
  • 软考 测试 静态测试 动态测试
  • 2025ICPC南昌邀请赛流水账
  • 有理函数积分的一般方法
  • Data Vault 2.0:企业数据建模的现代方法
  • IDEA推送到gitlab,jenkins识别,然后自动发布到需要的主机
  • 【Django】Django DRF 中如何手动调用分页器返回分页数据(APIView,action场景)
  • eclipse 生成函数说明注释
  • 手术机器人行业新趋势:Kinova多机械臂协同系统如何突破复杂场景适应性瓶颈?