信息:使用Hybris 5.7
我正在尝试编写自定义CacheRegion以便将Redis用于此目的(而不是像Maps或EHCache这样提供的内存解决方案)。
按照提供的说明here似乎没有提出。
我被卡住的一点是序列化元素对象的时刻,因为我没有实现序列化,所以我无法将其序列化为json或字节数组或其他任何东西(尝试使用Jackson,Kryo,FST和java默认序列化程序)。
代码如下(跳过其他部分):
...
@Override
public Object getWithLoader(CacheKey cacheKey, CacheValueLoader cacheValueLoader) throws CacheValueLoadException {
return Optional.ofNullable(get(cacheKey))
.orElseGet(() -> {
Object element = cacheValueLoader.load(cacheKey);
//Can't get to serialize *element* to store it
return element;
});
}
...
调试我发现Object元素实际上是 GenericBMPBean $ GenericItemEntityStateCacheUnit 的一个实例,它似乎包含很多东西(奇怪的是我找不到的实际数据除外)。 / p>
我还不了解的另一件事是EckCache实现似乎忽略了CacheKey.CacheUnitValueType的使用。即使它是 NON_SERIALIZABLE ,也会存储到EhCache中。
所以我的问题是:我应该如何设法序列化此类数据?
另外一个问题:标志 CacheUnitValueType 的所需用法是什么?
这背后的主要目标是将缓存与应用程序JVM分离,并提高HA和可伸缩性。
谢谢。
答案 0 :(得分:0)
我遇到的问题是序列化元素对象的时刻,因为我无法对其进行序列化。
不应序列化在hybris中不实现Serializable的对象。你必须处理缓存的内容。
中说明了这一点由于不具有可序列化的对象性质,因此无法在实体和类型系统区域中使用。