gpt4 book ai didi

java - 不可序列化对象的分布式缓存

转载 作者:行者123 更新时间:2023-11-29 08:45:51 25 4
gpt4 key购买 nike

出于性能原因,我的应用程序需要缓存不可序列化的对象。这些不可序列化的对象是从外部资源构建的内存模型。例如,验证模板以 XML 形式存储在数据库中,通过解析 XML 构建内存模型。内存模型的构建成本相对较高,因此缓存可以提高性能。但是,当底层记录发生变化时,需要从数据库中重新加载内存模型。

在单个应用场景中,我将对象存储在一个简单的映射中。当数据库中的记录发生更改时,将重建内存模型并替换 map 中的旧条目。

在分布式场景中,我需要失效消息在集群中传播,以便所有节点在记录更改时重建内存模型。我看过 Infinispan 和 Hazelcast,它们都要求所有缓存的对象都是可序列化的。但是,如果缓存在失效模式下运行(数据不通过网络发送),我不明白为什么缓存对象需要可序列化。

这个场景中常用的技术是什么?这种情况是否异常(即我应该做些不同的事情)?

最佳答案

However, if the cache operates in an invalidation mode (where data is not sent across the wire)

  • 不太确定这是什么意思,那为什么要将对象存储在分布式缓存中?您最初是如何将它们放入缓存中的?

您的对象不必在纯 Java 意义上是可序列化的,即,它们不必实现 Serializable 接口(interface)。但是由于您的缓存是分布式的,无论是 Hazelcast 还是 Memcached 或 EhCache,您都需要通过网络获取 Java 对象并将它们以某种外部格式存储在缓存中,然后能够从缓存中取回它们并恢复为 Java 对象.这称为编码/解码,或...序列化/反序列化。您可以考虑多种格式:XML、Json、Bson、Yaml、Thrift 等。有许多框架和库可以帮助您处理这些不同的序列化模式。 XStream、JAXB、Jackson、Apache Camel 等

就 Hazelcast 而言,其文档明确指出:“所有分布式对象(例如键和值对象)、提供给分布式队列的对象以及分布式可调用/可运行对象都必须是可序列化的。”也许您可以考虑使用 Guava 内存缓存?

关于java - 不可序列化对象的分布式缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25439276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com