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 に答える