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

摘要:
概述RedisTemplate默认使用的是基于JDK的序列化器,所以存储在Redis的数据如果不经过相应的反序列化,看到的结果是这个样子的:可以看到,出现了乱码,在程序层面上,不会影响程序的运行,但当出现数据错误,对数据进行排查时,就无从下手了。这个包包含两种类型的序列化程序,它们负责序列化过程:基于RedisSerializer的双向序列化器通过RedisElementReader和RedisElementWriter进行元素的读写这两种类型的序列化器主要区别在于,RedisSerializer主要序列化为byte[],RedisElementReader/RedisElementWriter使用ByteBuffer。

概述

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  
        />

<!--是对value的默认序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer。 -->
<bean    
        />

重新配置RedisTemplate:

<bean   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

免责声明:文章转载自《Spring Data Redis入门示例:数据序列化 (四)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows Server 2008 R2 服务器系统安装及配置全过程图文详解CentOS7安装RabbitMQ3.7下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Vue与Django数据交互

首先配置路由信息,理论上都会添加二级路由:所以会有请求转发 1 from django.conf.urls import url,include 2 3 url(r'^api/(?P<version>w+)/',include("api.urls")), 此时请求会转发给二级路由:api.urls 1 url(r'^course/$'...

探究 Redis 4 的 stream 类型

 redis 2 10 月初,Redis 搞了个大新闻。别紧张,是个好消息:Redis 引入了名为 stream 的新数据类型和对应的命令,大概会在年底正式发布到 4.x 版本中。像引入新数据类型这样的变化在 Redis 的发展历史上非常罕见,所以称之为大新闻一点也不为过。至少很多介绍 Redis 的资料要跟着修订了。 背景 按作者的介绍,strea...

微信小程序开发——setData的使用技巧

前言: 之前使用 setData ,一直都是作为给变量赋值,感觉比起vue给data中的变量的赋值还是有点麻烦的。 最近项目不太紧张,为了提高小程序的开发效率及提升小程序开发的能力,又重新的通读了下小程序的开发文档。发现 setData 还有一个非必填的参数 callback——setData引起的界面更新渲染完毕后的回调函数,通过这个回调函数,可以在更新...

HTML5 Canvas指纹及反追踪介绍

HTML5 Canvas指纹及反追踪介绍 1 Canvas指纹的简介很多网站通过Canvas指纹来跟踪用户。browserleaks[1]是一个在线检测canvas指纹的网站。一般的指纹实现原理即通过canvas画布绘制一些图形,填写一些文字,随后获取图形的base64编码,再经过hash后得到最终的指纹。 下面是一个简单的例子,最终调用toDataUrl...

链表的基础操作1

1.链表的重要操作 我们知道,链表的基础单位是一个个节点,那么第一步便是创建节点。 struct node{ typename data; //typename data 这里是数据域 node* next ; //指针域 }; 有一点要注意的是在C++中,是可以直接使用node的,而在C语言中,则需要使用struct node 不然会显示...

windows 环境下nginx + tomcat群 + redis 实现session共享

nginx作为负载均衡根据定义将不同的用户请求分发到不同的服务器,同时也解决了因单点部署服务器故障导致的整个应用不能访问的问题 在加入nginx之后,如果多个服务器中的一个或多个(不是全部)发生故障,均不影响用户的正常使用,会将用户请求分发到可以提供服务的服务器上 本节实例仅实现 一个nginx + 2个tomcat + redis实现java web应用...