• Java的进程内缓存框架:EhCache (转)


    EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。

    Ehcache缓存的特点:
    1. 快速.
    2. 简单.
    3. 多种缓存策略
    4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
    5. 缓存数据会在虚拟机重启的过程中写入磁盘
    6. 可以通过RMI、可插入API等方式进行分布式缓存
    7. 具有缓存和缓存管理器的侦听接口
    8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
    9. 提供Hibernate的缓存实现
     
    Ehcache缓存的使用(1) – 安装ehcache
    Ehcache 的特点,是一个纯Java ,过程中(也可以理解成插入式)缓存实现,单独安装Ehcache ,需把ehcache-X.X.jar 和相关类库方到classpath中。如项目已安装了Hibernate ,则不需要做什么,直接可以使用Ehcache 。
     
    Ehcache缓存的使用(2) - 生成CacheManager
    使用CacheManager 创建并管理Cache
    1.创建CacheManager有4种方式:
    A:使用默认配置文件创建
    Java代码
    CacheManager manager = CacheManager.create();
     
    B:使用指定配置文件创建
    Java代码
    CacheManager manager = CacheManager.create("src/config/ehcache.xml");//eclipse中的路径格式。代码中使用new File()来加载配置文件。要因需调整
     
    C:从classpath中找寻配置文件并创建
    Java代码
    URL url = getClass().getResource("/anothername.xml");
    CacheManager manager = CacheManager.create(url);
     
    D:通过输入流创建
    Java代码
    InputStream fis = new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath());
    try {
    manager = CacheManager.create(fis);
    } finally {
    fis.close();
    }
     
    Ehcache缓存的使用(3) – 解读Ehcache配置文件ehcache.xml
    重要的参数
    <diskStore path="D:/work2/renhewww/cache"/>//此处的pach属性也可以使用java.io.tmpdir
    <cache name=" sampleCache1"
    maxElementsInMemory="1"
    maxElementsOnDisk="10000"
    eternal="false"
    overflowToDisk="true"
    diskSpoolBufferSizeMB="20"
    diskPersistent="true"
    timeToIdleSeconds="43200"
    timeToLiveSeconds="86400"
    memoryStoreEvictionPolicy="LFU"
    />

    <?xml version="1.0" encoding="UTF-8"?>
    <ehcache updateCheck="false" dynamicConfig="false">
        <diskStore path="java.io.tmpdir"/>
        <cache name="staticResourceCache"
               maxElementsInMemory="1000"
               timeToIdleSeconds="7200"
               timeToLiveSeconds="7200">
        </cache>
    </ehcache>


    属性解释:

    必须属性:

    name:设置缓存的名称,用于标志缓存,惟一

    maxElementsInMemory:在内存中最大的对象数量

    maxElementsOnDisk:在DiskStore中的最大对象数量,如为0,则没有限制

    eternal:设置元素是否永久的,如果为永久,则timeout忽略

    overflowToDisk:是否当memory中的数量达到限制后,保存到Disk

    可选的属性:

    timeToIdleSeconds:设置元素过期前的空闲时间

    timeToLiveSeconds:设置元素过期前的活动时间

    diskPersistent:是否disk store在虚拟机启动时持久化。默认为false

    diskExpiryThreadIntervalSeconds:运行disk终结线程的时间,默认为120秒

    memoryStoreEvictionPolicy:策略关于Eviction

    缓存子元素:

    cacheEventListenerFactory:注册相应的的缓存监听类,用于处理缓存事件,如put,remove,update,和expire

    bootstrapCacheLoaderFactory:指定相应的BootstrapCacheLoader,用于在初始化缓存,以及自动设置。

    Ehcache缓存的使用(4) – 创建Cache
    通过CacheManager创建Cache
    Cache cache = manager.getCache("sampleCache1");
     
    Ehcache缓存的使用(5) – 利用cache存取数据
    存储数据
    Element element = new Element("key1", "value1");
    cache.put(new Element(element);
    获取数据
    Element element = cache.get("key1");
     
     

    缓存的创建,采用自动的方式

    CacheManager singletonManager = CacheManager.create();

    singletonManager.addCache("testCache");

    Cache test = singletonManager.getCache("testCache");

    或者直接创建Cache

    CacheManager singletonManager = CacheManager.create();

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

    manager.addCache(memoryOnlyCache);

    Cache test = singletonManager.getCache("testCache");

    删除cache

    CacheManager singletonManager = CacheManager.create();

    singletonManager.removeCache("sampleCache1");

    在使用ehcache后,需要关闭

    CacheManager.getInstance().shutdown()

    caches 的使用

    Cache cache = manager.getCache("sampleCache1");

    执行crud操作

    Cache.get(Object key),
    Cache.put(new Element(Object key, Object value)),
    Cache.remove(Object key)。  

    Cache cache = manager.getCache("sampleCache1");

    Element element = new Element("key1", "value1");

    cache.put(element);

    //update

    Cache cache = manager.getCache("sampleCache1");

    cache.put(new Element("key1", "value1");

    //This updates the entry for "key1"

    cache.put(new Element("key1", "value2");

    //get Serializable

    Cache cache = manager.getCache("sampleCache1");

    Element element = cache.get("key1");

    Serializable value = element.getValue();

    //get non serializable

    Cache cache = manager.getCache("sampleCache1");

    Element element = cache.get("key1");

    Object value = element.getObjectValue();

    //remove

    Cache cache = manager.getCache("sampleCache1");
    Element element = new Element("key1", "value1")
    cache.remove("key1"); 

    http://www.cnblogs.com/hubcarl/p/3257774.html

  • 相关阅读:
    c语言博客作业09
    c语言|博客作业08
    C语言|博客作业07
    C语言|博客作业06
    C语言|博客作业05
    C语言|博客作业04
    C语言|博客作业03
    关于Vue.js里面输入框在v-model之后如果给其绑定属性赋初始值导致绑定数据不响应问题
    前后端分离开发模式中关于前端取得分页数据时的分页问题(前端使用ant design pro)
    《电子病案在病案管理中存在问题及对策》文献阅读随笔
  • 原文地址:https://www.cnblogs.com/softidea/p/5146968.html
Copyright © 2020-2023  润新知