1

我有一个以这种方式配置的 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>

当我从客户端区域获取值并且客户端上的密钥未知时 - 它是从服务器获取的。但是,在那之后,如果服务器值发生变化 - 即使设置了订阅属性,新值也不会传播到客户端。

这里的错误配置是什么?

4

1 回答 1

3

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

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

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

这将确保您只接收“新”值,并将利用本地缓存进行重复检索,但不会尝试将所有值放入内存中。但是,兴趣注册有很多选项,因此您需要查阅 javadoc。

作为附加说明,CACHING_PROXY 通常与一些驱逐机制结合使用,以确保本地缓存的大小不会无限增长。

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

于 2015-07-01T12:49:23.500 回答