標籤:pen iss gpo 種類 排查 下載 cti depend buffer
概述
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入門樣本:資料序列化 (四)