Coherence数据管理模式

什么是可插接式Cache Store

简单来讲,Cache Store就是缓存引擎与底层存储之间的桥梁。例如:当我们希望通过调用cache.get(x)方法来获得缓存中的数据时,如果数据不存在,那么缓存引擎就会委托Cache Store与底层存储交互获取相应的数据,并且将其放入缓存中,这样我们就可以得到我们需要的数据了。也就是说Cache Store负责数据访问与操作(例如:增、删、改)。底层数据源的多样性(如:文件系统、数据库、运行时系统等),决定了那么Cache Store的实现也就有很多种,例如:Hibernate、TopLink Essentials、JPA等。Coherence可以根据需要插接不同的Cache Store,所以这种Cache Store就被称作“可插接式的Cache Store”。Coherence数据管理模式实际上定义了缓存访问者、Cache Store与底层存储的交互关系。

直接读模式(Read-Though Caching)

当应用通过键值X试图在缓存中查找数据时,如果在缓存中无法找到数据,Coherence自动委托Cache Store负责查询底层数据源,如果找到数据就将其返回给Coherence,然后由Coherence将其放入缓存并将数据返回给请求方。这里的直接指应用在无法找到实体时直接触发Cache Store与底层数据源交互,并且应用一直处于同步状态,直接得到最终结果。

直接写模式(Write-Through Caching)

当应用更新一条缓存记录时(例如:cache.put(…)),Coherence自动委托Cache Store更新底层数据源。在Cache Store还没有成功效更新同步到底层数据源前,应用一直处于同步等状态,直到Cache Store操作成功。

后端写模式(Writer-Behind Caching)

上直接写模式不同,当应用更新缓存记录时,Cache Store并不触发回写底层数据源的动作,而是将缓存数据的更新请求放入一个执行队列,当指定的延时时间到达时,Coherence将委托Cache Store完成队列中的所有更新操作并同步到底层数据源。但需要注意一点,此处的应用请求调用是异步方式,也就是说应用发出更新操作后,并不等待Cache Store与底层数据源交互完成。后端写模式有哪些好处:

  • 很明显,由于后端写模式对于调用方来说是异步方式,这就意味着调用方应用的性能提升
  • 由于后端写模式是将一批更新操作合并后再执行,所以避免了不必要的数据库交互,例如:对于缓存记录A有两个更新操作,经过合并后就只有一个了,从而避免了一次不必要的数据库操作。
  • 将应用系统与数据操作失败隔离,当队列中的更新被批量执行时,后端写模式可以配置为将不成功的操作再次放入队列。当应用配置使用Coherence缓存时并使用分区模式时,即使数据库操作不能成功,也不会影响应用系统的正常运行。
  • 可以实现线性扩展,用户可以根据需要增加缓存服务器节点,并通过设置Write-Behind时间间隔来提高数据库使用效率。

 

提前刷新模式(Refresh-Ahead Caching)

这种模式和直接读模式的本质区别是对于Cache Store与底层数据源交互的触发条件不同。在直接读模式中,只有当应用无法在缓存中找到数据时才会触发,而在提前刷新模式中,我们可以指定一个因子控制缓存刷新条件,例如:缓存失效周期为60秒,提前刷新因子为0.5。也就是说当应用访问缓存时,当缓存中的数据存活超过30秒(即:60*0.5),但是小于60秒时,Coherence将数据更新请求放入执行队列,执行队例会根据配置好的时间间隔委托Cache Store更新缓存数据。


...
   
      categories-cache-all-scheme
      DistributedCache
      
      
      
         categoriesLoaderScheme
         
            
               categories-eviction
            
         
         
            
               com.demo.cache.coherence.categories.CategoryCacheLoader
            
         
         0.5
      
      
      true
   
...
    
   
      categories-eviction
      20s
   
...

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>