RedisTemplate序列化工具GenericJackson2JsonRedisSerializer

17人阅读 评论(0) 收藏 举报
分类:

Redis作为高速缓存数据库,目前应用非常广泛。RedisTemplate是Spring提供用于操作redis数据库的一个类。 
将数据存放到Redis中,以及数据读取。这里必然涉及到数据的系列化和反系列化。RedisTemplate默认的系列化类是JdkSerializationRedisSerializer,用JdkSerializationRedisSerializer序列化的话,被序列化的对象必须实现Serializable接口。在存储内容时,除了属性的内容外还存了其它内容在里面,总长度长,且不容易阅读。 
我们要求是存储的数据可以方便查看,也方便反系列化,方便读取数据。 
JacksonJsonRedisSerializer和GenericJackson2JsonRedisSerializer,两者都能系列化成json,但是后者会在json中加入@class属性,类的全路径包名,方便反系列化。前者如果存放了List则在反系列化的时候如果没指定TypeReference则会报错java.util.LinkedHashMap cannot be cast to 。

在项目中我们可以灵活设置RedisTemplate的系列化器。 
这里写图片描述

我们可以看到RedisTemplate里面定义了key,value,hashKey,haskValue等键,值的系列化器,我们可以自己方便的修改。如果没有设置则会有默认的。 
JdkSerializationRedisSerializer。

实例:设置RedisTemplate系列化。GenericJackson2JsonRedisSerializer系列化和反系列化使用的是ObjectMapper

package com.xfl.boot.common.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * Created by XFL
 * time on 2017/6/12 23:24
 * description:
 */
@Configuration
public class RedisConfig {
    private static Logger logger = LoggerFactory.getLogger(RedisConfig.class);

    @Bean(name = "springSessionDefaultRedisSerializer")
    public GenericJackson2JsonRedisSerializer getGenericJackson2JsonRedisSerializer() {
        return new GenericJackson2JsonRedisSerializer();
    }
    @Bean
    public RedisTemplate<String, Object> getRedisTemplate(
            JedisConnectionFactory connectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(connectionFactory);
        redisTemplate.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        return redisTemplate;
    }
}
//数据取出示例:
RespCallbackDto respCallbackDto = (RespCallbackDto) redisTemplate.opsForHash().get(key, prvId);

这里写图片描述
可以看到保存到redis数据库中的数据是json,并且每个节点都有@class属性,这些属性在凡系列化时会使用到。

查看评论

Spring Redis(3)序列化

序列化Spring Data Redis支持JDK序列化、Json序列化、XML序列化 - JDK序列化:默认采用JDK序列化方式的类JdkSerializationRedisSerializer,...
  • supermancoke
  • supermancoke
  • 2017-04-11 14:55:43
  • 3053

RedisTemplate系列化器之GenericJackson2JsonRedisSerializer

Redis作为高速缓存数据库,目前应用非常广泛。RedisTemplate是Spring提供用于操作redis数据库的一个类。 将数据存放到Redis中,以及数据读取。这里必然涉及到数据的系列化和反...
  • u010180738
  • u010180738
  • 2018-02-27 01:04:08
  • 930

使用Spring Cache + Redis + Jackson Serializer缓存数据库查询结果中序列化问题的解决

应用场景我们希望通过缓存来减少对关系型数据库的查询次数,减轻数据库压力。在执行DAO类的select***(), query***()方法时,先从Redis中查询有没有缓存数据,如果有则直接从Redi...
  • tracker_w
  • tracker_w
  • 2015-07-08 10:32:21
  • 15579

Redis使用二、redis整合spring(redisTemplate工具类)

原文地址,转载请注明出处:http://blog.csdn.net/qq_34021712/article/details/75949706   ©王赛超 前言 关于哨兵模式的配置,我是参考网...
  • truelove12358
  • truelove12358
  • 2017-10-25 15:35:51
  • 251

Jackson2JsonRedisSerializer报错Could not read JSON: Unrecognized field...

nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized f...
  • baidu_29092471
  • baidu_29092471
  • 2017-02-15 13:29:02
  • 2897

spring Boot 填坑手册<二>: redis与cache之坑

在处理高并发时,我们常常用到缓存,首先,说说redis的配置,与注意事项. 在pom.xml中需要引入spring-boot-starter-data-redis和spring-boot-star...
  • J3oker
  • J3oker
  • 2016-09-18 14:07:35
  • 848

RedisTemplate的使用说明(序列化以及事物)

SDR官方文档中对RedisTemplate的介绍:the template is in fact the central class of the Redis module due to its r...
  • whatlookingfor
  • whatlookingfor
  • 2016-07-08 17:52:58
  • 7322

Spring-boot通过redisTemplate使用redis(无须手动序列化)

redisTemplate的一些操作可以参考下面俩篇文章 http://blog.csdn.net/whatlookingfor/article/details/51863286 http://w...
  • m0_37893932
  • m0_37893932
  • 2017-10-17 13:10:34
  • 2041

Redis缓存中使用Kryo序列化工具并且修改内容同时更新缓存

背景缓存做为加速数据访问的途径在许多的系统开发中已经是必不可少。在实际的使用中存在这样一个场景:对象的的内容非常庞大,一次数据查询量比较大,在并发访问时频繁访问数据库会造成性能瓶颈,实际使用中就会使用...
  • DERRANTCM
  • DERRANTCM
  • 2017-06-04 21:30:40
  • 1933

深入理解Spring Redis的使用 (二)、RedisTemplate事务支持、序列化

1.RedisTemplate的使用 这个类作为一个模版类,提供了很多快速使用redis的api,而不需要自己来维护连接,事务。 最初的时候,我创建的BaseRedisDao是继承自这个类的。...
  • goxohu
  • goxohu
  • 2016-10-31 21:01:19
  • 1515
    个人资料
    持之以恒
    等级:
    访问量: 40万+
    积分: 1万+
    排名: 2037
    最新评论