即使在更新的情况下,也会触发afterCreate事件 - 如何在Gemfire中运行?

时间:2012-11-07 11:23:04

标签: caching distributed-caching gemfire

客户端缓存配置 -

<region name="test" refid="PROXY">
    <region-attributes>
        <cache-listener>
            <class-name>com.test.cache.SimpleCacheListener</class-name>
        </cache-listener>
    </region-attributes>
</region>

对于上面的客户端配置,我使用了一个CacheListener来监听这个缓存“test”上的事件。

我面临的问题是即使在更新事件中,即在缓存中为相同的密钥设置不同的值,也会触发afterCreate事件。

region.put("test key","test value")

region.put("test key","test updated value")

都在Listener中生成一个afterCreateEvent。

EDITED

让我更清楚一下我想在这里实现什么。我希望在输入一个条目时通知我的客户端,该条目是否已经存在于缓存服务器中。

例如。

如果某个区域的缓存服务器上已存在Entry [Test,Value],那么在生成put [Test,Value1]客户端时应该知道这是一个更新,无论客户端中存在该条目,都应该这样做缓存与否。

我尝试过这样的事情 -

<region name="test" refid="PROXY" >
        <region-attributes data-policy="normal">
        <!--  <region-attributes> -->
        <subscription-attributes interest-policy="all"/>
            <cache-listener>
                <class-name>com.cache.test.SimpleCacheListener</class-name>
            </cache-listener>
        </region-attributes>

    </region>

进行上述更改后,它会检测更新事件,但前提是相同的客户端只是创建了一个条目并尝试更新它而不是之前创建的条目。

如果我错过了什么,请帮忙告诉我。

2 个答案:

答案 0 :(得分:1)

我刚刚在GemFire的VMware论坛上回答了你的问题:

http://communities.vmware.com/thread/424682?tstart=0

答案 1 :(得分:1)

如果在不同的缓存上修改密钥并且它在客户端代理缓存中不存在,那么是的,这是一个创建事件。