【问题标题】:afterCreate event is fired even in case of update -How Events works in Gemfire?即使在更新的情况下也会触发 afterCreate 事件 -Gemfire 中的事件如何工作?
【发布时间】:2012-11-07 11:23:04
【问题描述】:

客户端缓存配置 -

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

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

我面临的问题甚至是更新事件,即在缓存中为同一个键放置不同的值,触发 afterCreate 事件。

即

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

和

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

两者都在 Listener 中生成 afterCreateEvent。

已编辑

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

例如

如果某个区域的缓存服务器上已经存在条目 [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>

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

如果我遗漏了什么,请帮助并告诉我。

【问题讨论】:

    标签: caching distributed-caching gemfire


    【解决方案1】:

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

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

    【讨论】:

    • 请查看已编辑的评论。
    【解决方案2】:

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

    【讨论】:

    • 请查看已编辑的评论。
    猜你喜欢
    • 2011-12-23
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多