修改SpringBoot中RedisTemplate默认序列化为Json

背景

最近在使用redis保存对象时发现,对象是被序列化之后存入到redis中的,这样就不能直观的看到对象的属性信息,所以还是希望使用简单的json格式来保存对象到redis中。

那让我们来查看一下SpringBoot中默认的RedisTemplate的实现是什么

/**
 * Helper class that simplifies Redis data access code.
 * 

* Performs automatic serialization/deserialization between the given objects and the underlying binary data in the * Redis store. By default, it uses Java serialization for its objects (through {@link JdkSerializationRedisSerializer} * ). For String intensive operations consider the dedicated {@link StringRedisTemplate}. *

* The central method is execute, supporting Redis access code implementing the {@link RedisCallback} interface. It * provides {@link RedisConnection} handling such that neither the {@link RedisCallback} implementation nor the calling * code needs to explicitly care about retrieving/closing Redis connections, or handling Connection lifecycle * exceptions. For typical single step actions, there are various convenience methods. *

* Once configured, this class is thread-safe. *

* Note that while the template is generified, it is up to the serializers/deserializers to properly convert the given * Objects to and from binary data. *

* This is the central class in Redis support. * * @author Costin Leau * @author Christoph Strobl * @author Ninad Divadkar * @author Anqing Shao * @author Mark Paluch * @param the Redis key type against which the template works (usually a String) * @param the Redis value type against which the template works * @see StringRedisTemplate */ public class RedisTemplate extends RedisAccessor implements RedisOperations, BeanClassLoaderAware {

通过查看源码可知,默认使用的是Java serialization,默认实现类是StringRedisTemplate 

/**
 * String-focused extension of RedisTemplate. Since most operations against Redis are String based, this class provides
 * a dedicated class that minimizes configuration of its more generic {@link RedisTemplate template} especially in terms
 * of serializers.
 * 

* Note that this template exposes the {@link RedisConnection} used by the {@link RedisCallback} as a * {@link StringRedisConnection}. * * @author Costin Leau */ public class StringRedisTemplate extends RedisTemplate {

 那我们的需求是用Json格式保存我们的对象,所以就需要使用SpringBoot中的配置类来修改,配置类代码如下:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * @ClassName: RedisConfig
 * @Description: 修改Redis默认序列化方式
 * @Author: xuezhouyi
 * @Version: V1.0
 **/
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600)
public class RedisConfig {
	@Bean
	public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
		RedisTemplate template = new RedisTemplate<>();
		template.setConnectionFactory(redisConnectionFactory);
		/* 使用Json序列化,默认是JDK序列化 */
		Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(Object.class);
		template.setDefaultSerializer(serializer);
		return template;
	}
} 
  

 使用@Configuration注解来标记配置类,在方法上的@Bean注解交由Spring管理,这样我们就实现了Json来保存对象

你可能感兴趣的:(SpringBoot)