Java--Redis-08-redis在SpringBoot中配置

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 在Spring Boot中,我们可以通过配置来自定义一个属于我们自己的RedisTemplate。

在Spring Boot中,我们可以通过配置来自定义一个属于我们自己的RedisTemplate。

       在 SpringBoot2.x 之后,原来使用的jedis 被替换为了 lettuce,Jedis和Lettuce都是Redis Client,他两的区别是:

jedis : 采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用 jedis pool 连接 池!更像 BIO 模式

lettuce : 采用netty,实例可以在多个线程中进行共享,不存在线程不安全的情况!可以减少线程数据 了,更像 NIO 模式

序列化:

spring-data-redis中序列化类有以下几个:

GenericToStringSerializer:可以将任何对象泛化为字符串并序列化

Jackson2JsonRedisSerializer:序列化Object对象为json字符串。与JacksonJsonRedisSerializer相同

JdkSerializationRedisSerializer:序列化java对象

StringRedisSerializer:简单的字符串序列化


packagecom.xing.study.config;
importcom.fasterxml.jackson.annotation.JsonAutoDetect;
importcom.fasterxml.jackson.annotation.JsonTypeInfo;
importcom.fasterxml.jackson.annotation.PropertyAccessor;
importcom.fasterxml.jackson.databind.ObjectMapper;
importcom.fasterxml.jackson.databind.SerializationFeature;
importcom.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
importcom.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
importorg.springframework.context.annotation.Bean;
importorg.springframework.data.redis.connection.RedisConnectionFactory;
importorg.springframework.data.redis.core.RedisTemplate;
importorg.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
importorg.springframework.data.redis.serializer.StringRedisSerializer;
importjava.net.UnknownHostException;
@ComponentpublicclassRedisConfig {
@BeanpublicRedisTemplate<String,Object>redisTemplate(RedisConnectionFactoryredisConnectionFactory) throwsUnknownHostException {
RedisTemplate<String, Object>template=newRedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
// Json序列化配置Jackson2JsonRedisSerializer<Object>jackson2JsonRedisSerializer=newJackson2JsonRedisSerializer<>(Object.class);
ObjectMapperobjectMapper=newObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// 解决jackson2无法反序列化LocalDateTime的问题objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.registerModule(newJavaTimeModule());
// 该方法过时// om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);// 上面 enableDefaultTyping 方法过时,使用 activateDefaultTypingobjectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// String 的序列化StringRedisSerializerstringRedisSerializer=newStringRedisSerializer();
// key采用String的序列化方式template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jacksontemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
// 设置值(value)的序列化采用FastJsonRedisSerializer。// 设置键(key)的序列化采用StringRedisSerializer。template.afterPropertiesSet();
template.afterPropertiesSet();
returntemplate;
    }
}


如果使用lettuce,只要把注入参数改成 LettuceConnectionFactory 即可。

@BeanpublicRedisTemplate<String, Serializable>redisCacheTemplate(LettuceConnectionFactoryredisConnectionFactory) {
RedisTemplate<String, Serializable>template=newRedisTemplate<>();
template.setKeySerializer(newStringRedisSerializer());
template.setValueSerializer(newGenericJackson2JsonRedisSerializer());
template.setConnectionFactory(redisConnectionFactory);
returntemplate;
    }


在官网文档上可以找到应用的配置属性:

spring.application.name=studyserver.port=8889#服务器主机。默认localhostspring.redis.host=${REDIS-HOST:127.0.0.1}
#Redis服务器端口。默认6379spring.redis.port=${REDIS-PORT:6379}
#redis服务器的登录用户名。#spring.redis.username=#redis服务器的登录密码。spring.redis.password=${REDIS-PASW:Y4WyYKR5}
#连接工厂使用的数据库索引。默认0spring.redis.database=${REDIS-DB:1}
#连接池在给定时间可以分配的最大连接数(使用负值表示没有限制)默认8spring.redis.jedis.pool.max-active=8#连接池中空闲连接的最大数量。使用负值表示无限数量的空闲连接。默认8spring.redis.jedis.pool.max-idle=8#连接池中的最小空闲连接数。此设置仅在驱逐运行之间的时间和时间均为正时才有效。默认0spring.redis.jedis.pool.min-idle=0#连接池耗尽时,在抛出异常之前连接分配的最大阻塞等待时间。使用负值无限期阻止。默认-1msspring.redis.jedis.pool.max-wait=3000#连接超时时间(毫秒)spring.redis.timeout=30000##连接超时。##spring.redis.connect-timeout=##要在与CLIENTSENATE的连接上设置的客户端名称。#spring.redis.client-name=##要使用的客户端类型。默认情况下,根据类路径自动检测。##spring.redis.client-type=###跨集群执行命令时要遵循的最大重定向数。#spring.redis.cluster.max-redirects=##用于与哨兵进行身份验证的密码。#spring.redis.sentinel.password=##以逗号分隔的“host:port”对列表,用于引导。这表示集群节点的“初始”列表,并且需要至少有一个条目。#spring.redis.cluster.nodes=##空闲对象驱逐线程运行之间的时间。当为正时,空闲对象驱逐线程启动,否则不执行空闲对象驱逐。#spring.redis.jedis.pool.time-between-eviction-runs=##是否应使用使用所有可用刷新触发器的自适应拓扑刷新。默认false#spring.redis.lettuce.cluster.refresh.adaptive=##是否发现并查询所有集群节点以获取集群拓扑。当设置为false时,只有初始种子节点用作拓扑发现的源。默认true##spring.redis.lettuce.cluster.refresh.dynamic-refresh-sources=true##集群拓扑刷新周期。#spring.redis.lettuce.cluster.refresh.period=##池在给定时间可以分配的最大连接数。使用负值表示没有限制。默认8#spring.redis.lettuce.pool.max-active=8##池中“空闲”连接的最大数量。使用负值表示无限数量的空闲连接。默认8#spring.redis.lettuce.pool.max-idle=8##当池耗尽时,在抛出异常之前连接分配应该阻塞的最长时间。使用负值无限期阻止。默认-1ms#spring.redis.lettuce.pool.max-wait=-1ms##池中要维护的最小空闲连接数的目标。此设置仅在驱逐运行之间的时间和时间均为正时才有效。默认0#spring.redis.lettuce.pool.min-idle=0##空闲对象驱逐线程运行之间的时间。当为正时,空闲对象驱逐线程启动,否则不执行空闲对象驱逐。#spring.redis.lettuce.pool.time-between-eviction-runs=##关机超时。默认100ms#spring.redis.lettuce.shutdown-timeout=100ms##Redis服务器的名称。#spring.redis.sentinel.master=##逗号分隔的“主机:端口”对列表。#spring.redis.sentinel.nodes=##是否启用SSL支持。默认#spring.redis.ssl=false##连接网址。覆盖主机、端口和密码。用户被忽略。示例:redis://user: password@example.com :6379#spring.redis.url=

image.png


总结:

       每个公司或者个人都会自己搞一个RedisTemplate和封装一个RedisUtil。每个版本都会有API被弃用,有啥就上官方文档查吧。

       奥里给!!!



END

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
57 0
|
1天前
|
Java Maven Spring
SpringBoot配置跨模块扫描问题解决方案
在分布式项目中,使用Maven进行多模块开发时,某些模块(如xxx-common)没有启动类。如何将这些模块中的类注册为Spring管理的Bean对象?本文通过案例分析,介绍了两种解决方案:常规方案是通过`@SpringBootApplication(scanBasePackages)`指定扫描路径;推荐方案是保持各模块包结构一致(如com.xxx),利用SpringBoot默认扫描规则自动识别其他模块中的组件,简化配置。
SpringBoot配置跨模块扫描问题解决方案
|
8天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
52 14
|
24天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
45 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
11天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
69 13
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
49 1
SpringBoot入门(7)- 配置热部署devtools工具
|
19天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
47 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
存储 前端开发 JavaScript
springboot中路径默认配置与重定向/转发所存在的域对象
Spring Boot 提供了简便的路径默认配置和强大的重定向/转发机制,通过合理使用这些功能,可以实现灵活的请求处理和数据传递。理解并掌握不同域对象的生命周期和使用场景,是构建高效、健壮 Web 应用的关键。通过上述详细介绍和示例,相信读者能够更好地应用这些知识,优化自己的 Spring Boot 应用。
36 3
|
1月前
|
Java 数据库连接
SpringBoot配置多数据源实战
第四届光学与机器视觉国际学术会议(ICOMV 2025) 2025 4th International Conference on Optics and Machine Vision
63 8