今天通過spring-data-redis向redis寫資料。
org.springframework.datagroupid>
spring-data-redisartifactid>
1.7.2.releaseversion>
dependency>
應用程式寫入之後,redis客戶端通過鍵卻查不到,一開始以為是db不一樣,查詢應用程式的redis寫入的db,發現是0:
客戶端通過命令切換到0的db:
select
0
依然查詢不到,於是打斷點,在進入spring的類之前,對key並沒有做什麼操作或者轉換,於是使用rdm工具來看下redis的資料:
可以發現資料確實都在db0裡,然後點開,發現都是序列化的亂碼資料,然後想到可能是序列化的問題,在斷點中看到乙個類,jdkserializationredisserializer
。
這個類是redis用來序列化鍵值用的,實現了redisserializer
介面,這個介面還有一些其它的實現類:
主要說兩個,jdkserializationredisserializer
是通過jdk本身的序列化機制來序列化的,序列化的是實現了serializable
介面的pojo。底層還是通過objectinputstream
和objectoutputstream
實現的。
還有乙個是stringredisserializer
,這個類是將字串序列化,一般用來序列化鍵。
因為我使用的是org.springframework.data.redis.core.redistemplate
,所以預設使用jdkserializationredisserializer
來序列化鍵和值,當然通過客戶端就查不到了,可以手動指定key和value的序列化方式:
class="org.springframework.data.redis.connection.jedis.jedisconnectionfactory"
p:use-pool="true" p:host-name="$" p:port="$" p:password="$" />
id="redistemplate"
class="org.springframework.data.redis.core.redistemplate"
p:connection-factory-ref="jedisconnectionfactory"
p:enabletransactionsupport="true"
p:keyserializer-ref="stringredisserializer"
p:valueserializer-ref="jdkserializationredisserializer"/>
class="org.springframework.data.redis.serializer.stringredisserializer"
id="stringredisserializer"/>
class="org.springframework.data.redis.serializer.jdkserializationredisserializer"
id="jdkserializationredisserializer"/>
Redis例項 序列化和反序列化
由於每個字串型別鍵只能儲存乙個字串,而一篇部落格文章是由標題 正文 作者與發布時間等多個元素構成的。為了儲存這些元素,我們需要使用序列化函式 如serialize 將它們轉換成乙個字串。除此之外,因為字串型別鍵可以儲存二進位制資料,所以也可以使用messagepack進行序列化,它的速度更好,占用空...
redis序列化器
redis和session共享牽扯到了序列化器,所以找了找資料 redis快取用到了序列化,如果是存string就不需要用到序列化,但是如果需要存bean物件和集合物件,就必須要轉序列化,這說幾種 jdkserializationredisserializer 這個是spring data redi...
序列化和反序列化
先定義乙個類 serializable xmlroot shintech public class person set public string name set public person this 0,string.empty public person int m age,string m...