Redis 反序列化異常

微笑面對生活發表於2018-10-25

在進行專案的完善和修改過程中,難免出一些爛記性導致的bug。

25/10錯誤日誌
ERROR o.a.c.c.C.[.[localhost].[/].[dispatcherServlet]:181 - Servlet.service() for servlet [dispatcherServlet] in context with 
path [] threw exception [Request processing failed; nested exception is 
org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is 
org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the byte array a 
result of corresponding serialization for DefaultDeserializer?; nested exception is java.io.InvalidClassException: 
com.xxx.Competition; local class incompatible: stream classdesc serialVersionUID = 6538832880805972610, 
local class serialVersionUID = -3999125971536227608] with root cause
複製程式碼

剛開始沒看到redis字眼,只看到了Competition這個類反序列化失敗...導致繞了很大的圈子,幹了很多無謂的掙扎。

一瞬間的發現

再狂改了一頓程式碼後發現了是redis相關的報錯,MD啊,以後一定要耐心認真讀完每一行報錯。

好了,檢查Competition類的程式碼,真的什麼都忘了,好幾周前改的程式碼,一點都想不起來哪裡會出錯,然後我去看git日誌。發現我在之前給該類增加過欄位,然後redis的資料也忘記做清除,導致redis中的資料結構還是舊的,返回的序列號也是之前的,所以spring在拿到該資料後不能正確的給予反序列化,導致該報錯。

問題解決

找到問題原因,解決就很簡單了,直接將相關的redis做清除。

redis-cli keys "cpt_*"  |  xargs redis-cli del
複製程式碼

好了,訪問正常。

好的習慣很重要,一個功能開發不完就先別睡覺、吃飯等...。不然可能會付出雙倍的時間去填坑。


Redis 反序列化異常
關注公眾號,回覆java架構獲取架構視訊資源。


相關文章