0

我正在使用 GuavaCache (带有scalacache 包装器),我想在一些火花管道中存储和使用整个缓存对象。

我使用 kryo 编码器进行编码SomeService,这是一个包含缓存的案例类。运行代码时,抛出以下异常:

com.esotericsoftware.kryo.KryoException: java.lang.NullPointerException
Serialization trace:
localCache (com.google.common.cache.LocalCache$LocalManualCache)
underlying (scalacache.guava.GuavaCache)
cacheManager (com.myproject.LocalCacheManager)
LocalCacheManager(com.project.SomeService)
    at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:144)
    at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:543)
    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731)

Guava 缓存是可序列化的,因此我认为 Kryo 编码器应该能够对其进行编码。LocalManualCache类也被定义为Serializable

  • 当我直接使用番石榴缓存时同样的错误
  • 我不想使用asMap,因为每条记录的 TTL 都会丢失。

我可以以某种方式手动编码和解码 gauva 缓存对象吗?还是不可能使用自定义缓存?

4

0 回答 0