`
followith
  • 浏览: 4595 次
  • 性别: Icon_minigender_2
  • 来自: 南京
社区版块
存档分类
最新评论

infinispan 在缓存失效时,将数据入库的listeners监听事件

阅读更多

各位好:

  在项目中使用了jboss的infinispan作为缓存架构。我的配置文件如下:

      

<namedCache name="persistCache">
        <clustering mode="replication">
            <async asyncMarshalling="true"/>
        </clustering>
        <expiration lifespan="-1" maxIdle="1800000"/>
        <loaders passivation="false" shared="false" preload="true">
            <loader class="org.infinispan.loaders.file.FileCacheStore" fetchPersistentState="true"
                    ignoreModifications="false" purgeOnStartup="false">
                <properties>
                    <property name="location" value="/Users/wangxia/infinispan/notify"/>
                </properties>
            </loader>
        </loaders>
        <eviction wakeUpInterval="30000" maxEntries="200" strategy="FIFO"/>
        <deadlockDetection enabled="true" spinDuration="1000"/>
    </namedCache>

通过设置


确实在1800000毫秒后,cache中的entry失效了。但是通过加上自定义的监听器以后

public class MyListener {
    @CacheEntryCreated
    @CacheEntryModified
    @CacheEntryRemoved
    @CacheEntryPassivated
    @CacheEntryEvicted
    @CacheEntryVisited
    public void doSomething(Event event) {
        if (event.getType() == Event.Type.CACHE_ENTRY_CREATED){
          //System.out.println("Cache created.  Details = " + event);
        }else if (event.getType() == Event.Type.CACHE_ENTRY_MODIFIED){
          //System.out.println("Cache modified.  Details = " + event);
        }
        else if (event.getType() == Event.Type.CACHE_ENTRY_REMOVED)
            System.out.println("Cache removed.  Details = " + event);
        else if (event.getType() == Event.Type.CACHE_ENTRY_PASSIVATED)
            System.out.println("Cache passivated.  Details = " + event);
        else if (event.getType() == Event.Type.CACHE_ENTRY_EVICTED)
            System.out.println("Cache evicted.  Details = " + event);
        else if (event.getType() == Event.Type.CACHE_ENTRY_VISITED){
           //System.out.println("111111Cache visited.  Details = " + event);
        }
        else
            System.out.println("-----------evnet------"+event);
    }
}

 能够监听到

@CacheEntryCreated @CacheEntryModified,@CacheEntryVisited事件,有正确的打印输出。

@CacheEntryRemoved事件需要代码中自发调用执行cache.remove(key)然后会有打印输出。但是缓存失效,却没有被这些监听事件捕获到。

@CacheEntryPassivated @CacheEntryEvicted 事件在entry创建到entry失效的过程中也没有打印输出。

想知道infinispan的缓存失效,调用的是哪个方法,真诚求高手帮忙。


我想实现的是,将缓存中变化的内容持久化到数据库中,但由于变更相对比较频繁,如果每次变更都操作数据库的话性能较低。所以希望积累一定变化后,当缓存失效的时候,将其保存到数据库中。


真心求帮助。万分感谢。



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics