redis-springboot-redistemplate更改序列化方式

RedisTemplate默认序列化方式为jdkSerializeable,StringRedisTemplate为StringRedisSerializer。可手动配置RedisTemplate的序列化方式,以此解决从redis-cli客户端查询时出现的乱码问题。

edisTemplate 默认的序列化方式为 jdkSerializeable, StringRedisTemplate的默认序列化方式为StringRedisSerializer

可以通过手动配置, 将redisTemplate的序列化方式进行更改

解决从redis-cli客户端查询乱码问题

 

复制代码

package com.wenbronk.data.redis;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * redis的启动类
 * Created by wenbronk on 2017/6/12.
 */
@SpringBootApplication
public class RedisApplication {
    public static void main(String[] args) {
        SpringApplication.run(RedisApplication.class, args);
    }

    /**
     * redisTemplate 序列化使用的jdkSerializeable, 存储二进制字节码, 所以自定义序列化类
     * @param redisConnectionFactory
     * @return
     */
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        // 使用Jackson2JsonRedisSerialize 替换默认序列化
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

        // 设置value的序列化规则和 key的序列化规则
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

复制代码

<think>我们被要求使用中文回答问题,并在最后提出3-5个相关问题,且第一行必须是“§§相关问题§§” 用户本次的问题是:“redis 集成 springboot 默认配置”,即Spring Boot中Redis的默认配置 根据Spring Boot的自动配置,我们通常使用`spring-boot-starter-data-redis`,它会自动配置Redis连接工厂和RedisTemplate。 默认配置如下: 1. 连接工厂:默认使用Lettuce(如果存在),否则使用Jedis。 2. 连接属性:默认连接localhost:6379,无密码,使用数据库0。 3. RedisTemplate:默认使用JdkSerializationRedisSerializer,但通常我们会自定义序列化方式。 我们可以给出一个简单的示例,说明如何通过application.properties或application.yml配置Redis,以及如何自定义RedisTemplate。 但是注意,用户之前的问题是关于集群和哨兵,现在回到默认配置(单机),所以我们可以简单说明。 回答结构: 1. 解释默认配置 2. 给出配置文件示例 3. 自定义RedisTemplate的示例(因为默认序列化方式通常需要更改4. 最后按照要求提出相关问题 注意:必须严格遵守格式要求,最后一行以“§§相关问题§§”开头,然后列出3-5个问题。 </think>### Spring Boot集成Redis默认配置详解 #### 默认配置核心参数 在`spring-boot-starter-data-redis`依赖下,Spring Boot自动配置的默认值如下: ```yaml spring: redis: host: localhost # 默认主机地址 port: 6379 # 默认端口 password: null # 默认无密码 database: 0 # 默认DB索引 lettuce: # 默认客户端实现 pool: # 连接池配置 max-active: 8 # 最大连接数 max-idle: 8 # 最大空闲连接 min-idle: 0 # 最小空闲连接 timeout: 2000ms # 连接超时时间 ``` #### 自动配置的核心组件 1. **RedisConnectionFactory** - 自动创建`LettuceConnectionFactory`(优先于Jedis) - 基于`spring.redis.*`属性配置连接参数 2. **RedisTemplate** - 自动创建`RedisTemplate<Object, Object>` - 默认序列化器:`JdkSerializationRedisSerializer` - 支持事务操作(需开启`@EnableTransactionManagement`) 3. **StringRedisTemplate** - 专用字符串操作的模板 - 默认序列化器:`StringRedisSerializer` #### 默认配置行为验证代码 ```java @SpringBootTest public class RedisDefaultConfigTest { @Autowired private RedisTemplate<?, ?> redisTemplate; @Autowired private StringRedisTemplate stringRedisTemplate; @Test void testDefaultConfig() { // 验证连接工厂类型 assertThat(redisTemplate.getConnectionFactory()) .isInstanceOf(LettuceConnectionFactory.class); // 验证默认连接参数 LettuceConnectionFactory factory = (LettuceConnectionFactory) redisTemplate.getConnectionFactory(); assertThat(factory.getHostName()).isEqualTo("localhost"); assertThat(factory.getPort()).isEqualTo(6379); // 验证序列化器类型 assertThat(redisTemplate.getValueSerializer()) .isInstanceOf(JdkSerializationRedisSerializer.class); assertThat(stringRedisTemplate.getValueSerializer()) .isInstanceOf(StringRedisSerializer.class); } } ``` #### 自定义配置覆盖默认值 ```java @Configuration public class CustomRedisConfig { // 覆盖默认RedisTemplate序列化方式 @Bean public RedisTemplate<String, Object> redisTemplate( RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } // 覆盖连接池配置 @Bean @ConfigurationProperties(prefix = "spring.redis.lettuce.pool") public LettucePoolingClientConfiguration poolingConfig() { return LettucePoolingClientConfiguration.builder().build(); } } ``` #### 配置文件优先级顺序 1. 应用配置(`application.yml`) 2. 自定义配置类(如`@Bean RedisTemplate`) 3. Spring Boot自动配置(`RedisAutoConfiguration`) 4. 默认值(如上所示) **注意事项**: - 添加`@EnableCaching`开启缓存注解支持 - Redis健康检查默认通过`/actuator/health`端点提供 - 集群/哨兵模式配置会覆盖单机配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值