我有数百万个对象,我需要将它们保存到缓存中。为了减小这些对象的大小和序列化/反序列化的时间,我使用protobuf对象而不是POJO,然后将它们作为字节数组保存到Ehcache中。但是Ehcache会将protobuf字节数组放入Ehcache的对象中,然后将对象序列化到内存中,因此使用protobuf的优势已经消失。
我可以直接将protobuf对象的字节表示保存到Ehcache吗?
答案 0 :(得分:0)
当你说“Ehcache将protobuf字节数组放入Ehcache的对象”时,我猜你指的是net.sf.ehcache.Element,对吧?但是“然后将对象序列化为内存”,你的意思是什么? 为了澄清,Ehcache没有序列化要存储在堆上的任何东西。如果你谈论offHeap存储,那么肯定的东西会被序列化。但是如果你存储字节数组,那么序列化这些值是......很简单。此外,您不必担心内部数据结构序列化,这些是非常特别处理,即使您能够在那里使用protobuf,您也不会获得任何收益。
但是你使用protobuf为你的域实例和普通的Java序列化所获得的所有好处,你都不会松懈。