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

简介: 在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

目录
相关文章
|
人工智能 前端开发 Java
2025年WebStorm高效Java开发全指南:从配置到实战
WebStorm 2025不仅是一款强大的JavaScript IDE,也全面支持Java开发。本文详解其AI辅助编程、Java特性增强及性能优化,并提供环境配置、高效开发技巧与实战案例,助你打造流畅的全栈开发体验。
1047 4
|
Java Spring
Spring Boot配置的优先级?
在Spring Boot项目中,配置可通过配置文件和外部配置实现。支持的配置文件包括application.properties、application.yml和application.yaml,优先级依次降低。外部配置常用方式有Java系统属性(如-Dserver.port=9001)和命令行参数(如--server.port=10010),其中命令行参数优先级高于系统属性。整体优先级顺序为:命令行参数 &gt; Java系统属性 &gt; application.properties &gt; application.yml &gt; application.yaml。
1472 0
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
1070 25
|
12月前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
848 5
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
1032 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
748 4
|
Java 应用服务中间件 Linux
在Java 12环境中配置和部署Apache Tomcat的步骤。
这段部署Tomcat的冒险旅程充满技术挑战,但同时也像游戏一样充满乐趣。它需要你提前准备,仔细执行,并随时准备解决意外情况。成功后,你就可以在这匹强壮的网络野马上,带着你的Java应用,冲向Web开发的璀璨星空。
417 56
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
2025 5
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
761 0
探索Spring Boot的@Conditional注解的上下文配置
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
1724 10