redis的鍵和值序列化

2021-08-21 09:04:25 字數 1964 閱讀 9691

今天通過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。底層還是通過objectinputstreamobjectoutputstream實現的。

還有乙個是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...