1

我们将为我们的项目实施 gemfire。我们目前正在将 gemfire 缓存与我们的 DB2 数据库同步。因此,我们在将数据库数据放入缓存时遇到了问题。

将数据库数据放入区域。我已经实现com.gemstone.gemfire.cache.CacheLoader并覆盖了它的加载方法。正如java doc load 方法所写的,只会返回一个Object。但是对于我们的要求,我们将不得不从 load 方法返回多个 VO

public List<CmDvceInvtrGemfireBean> load(LoaderHelper<CmDvceInvtrGemfireBean, CmDvceInvtrGemfireBean> helper)
            throws CacheLoaderException

在以List<CmDvceInvtrGemfireBean>gemfire 区域的形式返回多个 VO 时,将其视为单个值。

所以,当我调用时,

System.out.println("return COUNT" + cmDvceInvtrRecord.query("SELECT COUNT(*) FROM /cmDvceInvtrRecord"));

它返回一个计数。但我可以看到总共 7 个数据。

所以,我想实现一种机制,将所有 7 个值作为单独的 VO 在 Region

有没有办法使用 Gemfire CacheLoader 来做到这一点?

4

1 回答 1

0

CacheLoader旨在仅在缓存未命中时为 GemFire 中的单个条目加载值Region。正如Javadoc所说...

..创建所需的值..

虽然键可以映射到多值(例如数组/集合)值,但CacheLoader只能填充单个条目。

您将不得不诉诸其他方法,在单个操作中使用多个“条目”填充缓存。

出于好奇,您为什么需要(要求?)一次加载多个条目(来自数据库)?您是否试图尽量减少到数据库的往返次数?

另外,您使用什么逻辑来决定将根据CacheLoader?

例如,您是否以某种方式尝试根据键从数据库中可预测地选择值,从而最大限度地减少未来调用中的CacheLoader缓存未命中?Region.get(key)

抱歉,我现在没有更好的答案给你,但其中一些问题的答案可能会帮助我为你提供一些替代方案的想法。

干杯,约翰

于 2016-09-16T16:42:40.610 回答