對于java實現序列化的重要性,在單機程序內是不太容易被重視的,在本地調試中,tomacat自動為為序列化的程序實現了序列化,而且bean(用來實現緩存的java程序)太小,不會出現什么問題。
但是一旦部署到云端,麻煩就出現了,就會發現session為什么存不進值呢?不久前我在新浪云云端部署session就出現了未能取不到值的問題。
針對新浪云服務器,session的信息使用的是分布式Memcache存儲。
而Memcache存儲呢?
不少想構建大負載的網站都采取Memcache來分擔數據庫的壓力。
Memcache首先在服務器端的內存中開辟一個空間,然后建立一個hash表。
memcache 以守護程序的形式運行在服務器端(一個或者多個服務器),隨時接受來自客戶端的連接操作,然后進行存取數據,Memcache是一款nosql內存數據庫。采用的是鍵值存儲,每個客戶端存入的對象都有一個唯一的key。但是對象是沒辦法持久化的,跟memcache很相似的redis是可以實現持久化到硬盤的。然后把客戶端需要緩存的數據以key-value的形式保存在服務器的內存中的,value值存入key值hash轉化后的對應的某個服務器上。取值的時候通過同樣的轉化后對響應的服務器上付出請求即可。
而在序列化在在其中起到什么作用呢?
在memcache緩存到內存的時候,是需要使用到序列化存儲的,因此如果你的bean包中的代碼都沒實現序列化接口,在緩存的時候是不會被緩存到服務器內存中的,這樣就造成了session并沒有存值的問題發生。
所以在部署到新浪云的程序存儲到session中的對象必須實現序列化接口才可以進行session存儲的。