• Spring Data Redis入门示例:数据序列化 (四)


    概述

    RedisTemplate默认使用的是基于JDK的序列化器,所以存储在Redis的数据如果不经过相应的反序列化,看到的结果是这个样子的:

    乱码啦

    可以看到,出现了乱码,在程序层面上,不会影响程序的运行,但当出现数据错误,对数据进行排查时,就无从下手了。

    序列化器

    在Spring Data Redis中,用户自定义类型和存储数据之间的转换(反之亦然)由org.springframework.data.redis.serializer包下的类进行处理。
    这个包包含两种类型的序列化程序,它们负责序列化过程:

    • 基于RedisSerializer的双向序列化器
    • 通过RedisElementReaderRedisElementWriter进行元素的读写(2.0引进的)
      这两种类型的序列化器主要区别在于,RedisSerializer主要序列化为byte[],RedisElementReader/RedisElementWriter使用ByteBuffer
      基于RedisSerializer的序列化器有多种实现,可以直接使用,如:
    • StringRedisSerializer
    • JdkSerializationRedisSerializer(默认)
    • OxmSerializer(依赖于Spring OXM)
    • Jackson2JsonRedisSerializer/GenericJackson2JsonRedisSerializer(依赖于jackson)

    序列化的范围

    序列化可以应用到 Key Value HashKey HashValue 上,在 RedisTemplate 中,有四个属于与之对应:
    keySerializer valueSerializer hashKeySerializer hashValueSerializer

    基于Json的序列化

    引入Jackson的maven依赖:

    <jackson.databind.version>2.8.5</jackson.databind.version>
    <!-- jackson-databind -->
    <dependency>
    	<groupId>com.fasterxml.jackson.core</groupId>
    	<artifactId>jackson-databind</artifactId>
    	<version>${jackson.databind.version}</version>
    </dependency>
    

    配置序列化器:

    <!-- 缓存序列化方式 -->
    <!--对key的默认序列化器。默认值是StringSerializer -->
    <bean id="stringRedisSerializer"
          class="org.springframework.data.redis.serializer.StringRedisSerializer" />
    
    <!--是对value的默认序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer。 -->
    <bean id="genericJackson2JsonRedisSerializer"  
          class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
    

    重新配置RedisTemplate:

    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory"/>
        <property name="keySerializer" ref="stringRedisSerializer" />
        <property name="valueSerializer" ref="stringRedisSerializer"/>
        <property name="hashKeySerializer" ref="stringRedisSerializer"/>
        <property name="hashValueSerializer" ref="genericJackson2JsonRedisSerializer" />
    </bean>
    

    重新运行上一节的示例,得到如下结果:

    序列化后的结果

    示例说明

    1. 查看redis的管理工具是:RedisDesktopManager,下载地址:https://redisdesktop.com/download
  • 相关阅读:
    Q739.每日温度
    面试题46. 把数字成字符串
    [990. 等式方程的可满足性]--并查集
    [128. 最长连续序列]
    javaweb实现简单登陆功能
    7.12_python_lx_practise
    7.12_python_lx_day6
    7.12_python_lx_day5
    7.2_python_lx_day4
    7.2_python_lx_day3
  • 原文地址:https://www.cnblogs.com/Jxwz/p/8372306.html
Copyright © 2020-2023  润新知