如何从gemfire缓存加载器获取多个数据?

时间:2016-09-15 11:47:04

标签: gemfire spring-data-gemfire

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

将DB数据放入区域。我实现了com.gemstone.gemfire.cache.CacheLoader并覆盖它的加载方法。正如在java doc中编写的load方法将只返回一个Object。但是对于我们的要求,我们必须从加载方法返回多个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有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

CacheLoader意味着仅为缓​​存未命中的GemFire Region中的单个条目加载值。正如Javadoc所说......

  

..为所需的 ..

创建值

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

您将不得不采用其他方法在一次操作中使用多个“条目”填充缓存。

出于好奇,你为什么需要(要求?)一次加载多个条目(来自数据库)?您是否尝试最小化到DB的往返次数?

另外,您使用什么逻辑来决定根据CacheLoader中提供的信息(即密钥)来加载来自数据库的VO?

例如,您是否试图根据CacheLoader密钥以可预测的方式从数据库中选择值,以便随后在未来Region.get(key)次呼叫中最大限度地减少缓存未命中?

很抱歉,我现在没有更好的答案,但对其中一些问题的回答可能有助于我提供一些替代方案的建议。

干杯, 约翰