我们将为我们的项目实施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有没有办法做到这一点?
答案 0 :(得分:0)
CacheLoader意味着仅为缓存未命中的GemFire Region
中的单个条目加载值。正如Javadoc所说......
..为所需的键 ..
创建值
虽然键可以映射到多值(例如数组/集合)值,但CacheLoader
只能填充单个条目。
您将不得不采用其他方法在一次操作中使用多个“条目”填充缓存。
出于好奇,你为什么需要(要求?)一次加载多个条目(来自数据库)?您是否尝试最小化到DB的往返次数?
另外,您使用什么逻辑来决定根据CacheLoader
中提供的信息(即密钥)来加载来自数据库的VO?
例如,您是否试图根据CacheLoader
密钥以可预测的方式从数据库中选择值,以便随后在未来Region.get(key)
次呼叫中最大限度地减少缓存未命中?
很抱歉,我现在没有更好的答案,但对其中一些问题的回答可能有助于我提供一些替代方案的建议。
干杯, 约翰