Spring Data Redis入门示例:数据序列化 (四)
概述
RedisTemplate
默认使用的是基于JDK
的序列化器,所以存储在Redis
的数据如果不经过相应的反序列化,看到的结果是这个样子的:
可以看到,出现了乱码,在程序层面上,不会影响程序的运行,但当出现数据错误,对数据进行排查时,就无从下手了。
序列化器
在Spring Data Redis中,用户自定义类型和存储数据之间的转换(反之亦然)由org.springframework.data.redis.serializer
包下的类进行处理。
这个包包含两种类型的序列化程序,它们负责序列化过程:
- 基于
RedisSerializer
的双向序列化器 - 通过
RedisElementReader
和RedisElementWriter
进行元素的读写(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
Spring Data Redis入门示例:数据序列化 (四)的更多相关文章
- Spring Data Redis入门示例:基于Jedis及底层API (二)
使用底层API:RedisConnectionFactory和RedisConnection可以直接操作Redis,下面是一个简单的例子: ### Maven依赖 <properties> ...
- Spring Data Redis入门示例:Hash操作(七)
将对象存为Redis中的hash类型,可以有两种方式,将每个对象实例作为一个hash进行存储,则实例的每个属性作为hash的field:同种类型的对象实例存储为一个hash,每个实例分配一个field ...
- Spring Data Redis入门示例:字符串操作(六)
Spring Data Redis对字符串的操作,封装在了ValueOperations和BoundValueOperations中,在集成好了SPD之后,在需要的地方引入: // 注入模板操作实例 ...
- Spring Data Redis入门示例:基于RedisTemplate (三)
使用底层API:RedisConnection操作Redis,需要对数据进行手动转换(String <---->byte),需要进行多数重复性工作,效率低下:org.springframe ...
- Spring Data Redis入门示例:程序配置(五)
单机配置 redis.properties配置 #redis的服务器地址 redis.host=127.0.0.1 #redis的服务端口 redis.port=6379 #客户端超时时间单位是毫秒 ...
- spring data redis使用示例
1. 配置依赖文件 <dependencies> <dependency> <groupId>org.springframework.data</groupI ...
- 关于Spring Data redis几种对象序列化的比较
redis虽然提供了对list set hash等数据类型的支持,但是没有提供对POJO对象的支持,底层都是把对象序列化后再以字符串的方式存储的.因此,Spring data提供了若干个Seriali ...
- Spring Data Redis —— 快速入门
环境要求:Redis 2.6及以上,javase 8.0及以上: 一.Spring Data Redis 介绍 Spring-data-redis是spring的一部分,提供了在srping应用中通过 ...
- Spring Data Redis示例
说明 关于Redis:一个基于键值对存储的NoSQL内存数据库,可存储复杂的数据结构,如List, Set, Hashes. 关于Spring Data Redis:简称SDR, 能让Spring应用 ...
随机推荐
- RDA 常用API
FAC: app_factory_data_new.h app_guiobj_cul_fm_factorySetting_new.c _APP_Update_Layer() //刷新节点 密码文件: ...
- LR:HTML-based script和URL-based script方式录制的区别
转http://www.cnblogs.com/xiaojinniu425/p/6275257.html 一.区别: 为了更加直观的区别这两种录制方式,我们可以分别使用这两种方式录制同一场景(打开百度 ...
- 【181】IDL 代码从 Windows 转移到 Linux
文件夹分隔符,Windows 是“/”,Linux 是“\”,按照程序,需要修改 通过 bash 运行 *.pro 文件,貌似只能运行没有参数的,有参数的需要写入到文件中 idl 的文件不能用大写字母 ...
- 虚拟机安装hadoop
1.用VMware建立两台虚拟机(Centos6.5)系统,并设立主机名为node1与node2 2.设置虚拟机网络两台都是设置为如图: 3.修改两台虚拟机的/etc/hosts的文件为 (其中192 ...
- NOIp 2014 寻找道路【图的遍历/最短路】By cellur925
题目传送门 比较裸的图论,结果自己还是没做出来,我真菜. 我们根据题意,只要把不能通向终点的点求出,然后再分别以这些点为起点,求出它们能到达的点,这些点也不能在路径上. 之后跑一个最短路即可. 注意以 ...
- A - I'm bored with life
Holidays have finished. Thanks to the help of the hacker Leha, Noora managed to enter the university ...
- 2017 JUST Programming Contest 3.0 I. Move Between Numbers
I. Move Between Numbers time limit per test 2.0 s memory limit per test 256 MB input standard input ...
- 211 Add and Search Word - Data structure design 添加与搜索单词 - 数据结构设计
设计一个支持以下两个操作的数据结构:void addWord(word)bool search(word)search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z . ...
- Abp Framework中文文档上线
感谢 ABP框架中国小组 给我们带来的ABP中文翻译,Web+为方便广大学习爱好者随时查阅,现推出了Gitbook风格的在线阅读文档:http://www.webplus.org.cn/documen ...
- Android 给按钮添加监听事件
在安卓开发中,如果要给一个按钮添加监听事件的话,有以下三种实现方式 1.方式一 public class MainActivity extends ActionBarActivity { @Overr ...