1. 程式人生 > >Memcache中實體類序列化的總結

Memcache中實體類序列化的總結

在客戶端呼叫伺服器端的Memcache快取的時候,我需要將一個實體類存入到一個List中,然後將這個List進行快取,在這個過程中,實體類需要進行 
implements java.io.Serializable

這個都沒有問題,剛開始寫入快取很正常,但是在用另一個專案獲取這個快取的時候莫名其妙的報錯

local class incompatible: stream classdesc serialVersionUID = 321321343434, local class serialVersionUID = 43243287673213

從這個錯誤中能看出大概意思,遠端伺服器上的serialVersionUID和本地的不一樣,這是序列化的一些機制,詳細的我也不是很清楚,我只知道本地和遠端伺服器上面的UID必須是一樣的,於是我去改本地種的UID

private static final long serialVersionUID = <span style="font-family: Arial, Helvetica, sans-serif;">321321343434</span><span style="font-family: Arial, Helvetica, sans-serif;">;</span>

改好之後再執行專案,還是出現一樣的錯誤,於是乎到處找資料,但是都感覺沒問題呀,開始是懷疑伺服器上面的Memcache中的快取沒有進行清除,於是清除了一下,還是不行,最後沒辦法只有將寫快取的那個實體類打包成jar,把這個jar匯入需要呼叫伺服器快取的專案中,終於可以了,雖然還是沒找到真正原因,(但是個人理解是序列化實體類之後,那個.class檔案有一個唯一的UID,也有可能寫入到記憶體中了,所以其他地方需要呼叫快取的話,就需要這個唯一的.class類了),白白花了我一上午時間,唉