Gemfire客户端区域从服务器

时间:2015-07-01 11:37:05

标签: gemfire

我有一个以这种方式配置的Gemfire服务器区域(分布式)和本地区域(缓存代理):

<client-cache>
<pool name="client" subscription-enabled="true">     
    <locator host="localhost" port="13489" />
</pool>

<region name="customers" refid="CACHING_PROXY">
    <region-attributes>
        <subscription-attributes interest-policy="all"/>
        <!--<subscription-attributes interest-policy="cache-content"/>-->
    </region-attributes>
</region>
</client-cache>

当我从客户端区域获取值并且客户端上的密钥未知时 - 它将从服务器获取。但是,在此之后,如果服务器值发生更改 - 即使设置了subscription-attributes,新值也不会传播到客户端。

这里的配置错误是什么?

1 个答案:

答案 0 :(得分:3)

要将所有更改推送到本地缓存,您需要删除订阅属性标记,而是在池上保留subscription-enabled = true,然后以编程方式调用region.registerInterest API GemFire JavaDoc导致服务器开始向您的客户端发送更改通知。

作为一个很好的起点,我建议

region.registerInterestRegex(".*", InterestResultPolicy.NONE, false, false)

这将确保您只收到&#34; fresh&#34;值和将利用本地缓存进行重复检索,但不会尝试将所有值都放在内存中。但是,有很多兴趣注册选项,所以你需要咨询javadoc。

作为补充说明,CACHING_PROXY通常与一些逐出机制相结合,以确保本地缓存的大小不会无限增长。

此外,region标记内的订阅属性实际上适用于服务器端配置,而不是客户端。即使在服务器端,通常也不需要配置订阅属性,因为服务器端区域快捷方式(PARTITION,REPLICATE等)通常会对它们进行适当的配置。