Java Web技术之Redis(04) - 序列化与反序列化

本文介绍如何在Spring Data Redis中使用自定义序列化器,包括JdkSerializationRedisSerializer,OxmSerializer,Jackson2JsonRedisSerializer和StringRedisSerializer。通过创建DefRedisSerializer类和RedisConfig类,可以实现JSON格式的数据存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、介绍

       Redis虽然提供了对string(字符串),hash(哈希),list(列表),set(集合)及zset等数据类型的支持,但没有提供对POJO对象的支持,底层都是把对象序列化后再以字符串的方式存储。
       spring-data-redis提供了若干个Serializer,主要包括:

      (1)JdkSerializationRedisSerializer——使用Java自带的序列化机制将对象序列化为一个字符串(spring默认序列化方式);

      (2)OxmSerializer——将对象序列化为xml字符串;

      (3)Jackson2JsonRedisSerializer——将对象序列化为json字符串;

      (4)StringRedisSerializer——简单字符串到byte []序列化。

二、自定义序列化方式

       1.创建DefRedisSerializer类

/**
 * <B>概要:</B><br>自定义序列化器</br>
 * <P><B>详细说明:</B><br></br></P>
 *
 * @author Eternal_L
 * @version 1.00
 * @date 2018/10/22
 * @since JDK 1.8
 */
public class DefRedisSerializer {
    
    /**
     * stringRedisSerializer
     *
     * @return stringRedisSerializer
     */
    public static StringRedisSerializer stringRedisSerializer() {
        return new StringRedisSerializer();
    }
    
    /**
     * jackson2JsonRedisSerializer
     *
     * @return jackson2JsonRedisSerializer
     */
    public static Jackson2JsonRedisSerializer<?> jackson2JsonRedisSerializer() {
        // 使用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);
        // 返回
        return jackson2JsonRedisSerializer;
    }
    
}

       2.创建RedisConfig类

/**
 * <B>概要:</B><br>Redis 配置</br>
 * <P><B>详细说明:</B><br></br></P>
 *
 * @author Eternal_L
 * @version 1.00
 * @date 2018/10/22
 * @since JDK 1.8
 */
@EnableCaching
@Configuration
public class RedisConfig {
    
    /**
     * redisTemplate
     *
     * @return RedisTemplate
     */
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(connectionFactory);
        // 设置key和value的序列化规则
        redisTemplate.setKeySerializer(DefRedisSerializer.stringRedisSerializer());
        redisTemplate.setValueSerializer(DefRedisSerializer.jackson2JsonRedisSerializer());
        redisTemplate.setHashKeySerializer(DefRedisSerializer.jackson2JsonRedisSerializer());
        redisTemplate.setHashValueSerializer(DefRedisSerializer.jackson2JsonRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
    
}

三、测试

       在上一章QuickSart项目中加入上面两个类,重新运行测试用例,将得到如下图结果:

       

 

转载于:https://www.cnblogs.com/rn-yx/p/9828143.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值