zoukankan      html  css  js  c++  java
  • 缓存服务Ehcache方案

    1  Ehcache简介

      在Java项目广泛的使用。它是一个开源的、设计于提高在数据从RDBMS中取出来的高花费、高延迟采取的一种缓存方案。正因为Ehcache具有健壮性(基于java

    开发)、被认证(具有apache 2.0 license)、充满特色,所以被用于大型复杂分布式web application的各个节点中。

      具有哪些特色?

        1. 够快

          Ehcache的发行有一段时长了,经过几年的努力和不计其数的性能测试,Ehcache终被设计于large, high concurrency systems.

        2. 够简单

          开发者提供的接口非常简单明了,从Ehcache的搭建到运用运行仅仅需要的是你宝贵的几分钟。其实很多开发者都不知道自己用在用Ehcache,Ehcache

        被广泛的运用于其他的开源项目。

        3.够袖珍

          关于这点的特性,官方给了一个很可爱的名字small foot print ,一般Ehcache的发布版本不会到2M,V 2.2.3 才 668KB。

        4. 够轻量

          核心程序仅仅依赖slf4j这一个包,没有之一!

        5.好扩展

          Ehcache提供了对大数据的内存和硬盘的存储,最近版本允许多实例、保存对象高灵活性、提供LRU、LFU、FIFO淘汰算法,基础属性支持热配置、支持

        的插件多。

        6.监听器

          缓存管理器监听器 (CacheManagerListener)和 缓存监听器(CacheEvenListener),做一些统计或数据一致性广播挺好用的

      如何使用?

        够简单就是Ehcache的一大特色,自然用起来just so easy!

     

      CacheManager manager = CacheManager.newInstance("src/config/ehcache.xml");  

      Ehcache cache = new Cache("testCache", 5000, false, false, 5, 2);       

      cacheManager.addCache(cache);                             

     

      name:缓存名称。

      maxElementsInMemory:缓存最大个数。

      eternal:对象是否永久有效,一但设置了,timeout将不起作用。

      timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时

    间无穷大。

      timeToLiveSeconds:设置对象在失效前允许存活时间,最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就

    是对象存活时 间无穷大。

      overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。

      diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。

      maxElementsOnDisk:硬盘最大缓存个数。

      diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.

      diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。

      memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU。你可以设置为 FIFO或是

      LFU。

      clearOnFlush:内存数量最大时是否清除。

     

    2  springMVC+spring+mybatis+ehcache详细配置

      2.1 首先需要先需要两个主要的jar包

        1 ehcache-core-2.4.6.jar

        2 mybatis-ehcache-1.0.1.jar

        ehcache-core一定要1.3以上的版本 因为1.3之前好像不支持集群的。

      2.2 需要创建一个ehcache.xml在类路径下面

      

    <?xml version="1.0" encoding="utf-8"?>   
        <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
        <diskStore path="java.io.tmpdir"/>  
        <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="30" timeToLiveSeconds="30" overflowToDisk="false"/>  
        <!--    
        配置自定义缓存   
        maxElementsInMemory:缓存中允许创建的最大对象数   
        eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。   
        timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前, 
          两次访问时间的最大时间间隔值,这只能在元素不是永久驻留时有效, 
          如果该值是 0 就意味着元素可以停顿无穷长的时间。   
        timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,   这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。   
        overflowToDisk:内存不足时,是否启用磁盘缓存。   
        memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。      
        -->
        <cache name="testCache"    
        maxElementsInMemory="10000"    
        eternal="true"   
        overflowToDisk="false"    
        timeToIdleSeconds="0"    
        timeToLiveSeconds="600"   
        memoryStoreEvictionPolicy="LFU" />  
    </ehcache>

      备注:上面的diskStor path 你可以指定某一个路径下,java.io.tmpdir 指的是你系统的缓存目录

      2.3 在spring的配置文件里面加上一段配置:

    <!-- 使用ehcache缓存 -->    
       <bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">  
         <property name="configLocation" value="classpath:ehcache.xml" />  
       </bean>

      这样就可以把ehcache和spring整合起来了。

      然后在对应的mapper.xml 里面加上如下配置:

    <cache type="org.mybatis.caches.ehcache.LoggingEhcache" >  
        <property name="timeToIdleSeconds" value="3600"/><!--1 hour-->  
        <property name="timeToLiveSeconds" value="3600"/><!--1 hour-->  
        <property name="maxEntriesLocalHeap" value="1000"/>  
        <property name="maxEntriesLocalDisk" value="10000000"/>  
        <property name="memoryStoreEvictionPolicy" value="LRU"/>  
    </cache>

      后面的参数配置不加也可以,都会有一个默认值,根据自己的需要来配置,然后这个配置是会带上cache执行的日志,如果不要带日志可以把LogginEhcache改成

    EhcacheCache。

      在mapper.xml这样设置了默认是全部操作都会执行缓存策略,如果有某些sql不需要执行,可以把useCache设置为false。

    <select id="selectByExample" resultMap="BaseResultMap" parameterType="com.ehcache.manage.entity.TempExample" useCache="false" >
    
    </select>

     

    <!-- Start -->

    获知及时信息,请关注我的个人微信订阅号:0与1的那点事

     

    <!-- End -->

     

    本文为博主原创文章,转载请注明出处!

    http://www.cnblogs.com/libingbin/

    感谢您的阅读。

  • 相关阅读:
    WPF Prefix 'attach' does not map to a namespace.
    C# 用ManulResetEvent 控制Thread的 Suspend、Resume
    C# 监控Windows睡眠与恢复
    c# DataTable to Object Mapping
    C# DispatcherTimer Start之后立即执行
    Visual studio 编译时copy文件、文件夹
    c# 无法加载xxx.dll 找不到指定的模块(如何指定文件夹)
    EntityFramework 找不到方法:“Void System.Data.Entity.DbModelBuilder.RegisterEntityType
    wpf 全局异常捕获处理
    pandas入门
  • 原文地址:https://www.cnblogs.com/libingbin/p/6480267.html
Copyright © 2011-2022 走看看