zoukankan      html  css  js  c++  java
  • ehcache缓存入门学习

    ehcache缓存入门学习

    1,概念 特性

    EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。
    主要的特性有:1. 快速2. 简单3. 多种缓存策略4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题5. 缓存数据会在虚拟机重的过程中写入磁盘6. 可以通过RMI、可插入API等方式进行分布式缓存7. 具有缓存和缓存管理器的侦听接口8. 支持多缓存管理器实例,以一个实例的多个缓存区域9. 提供Hibernate的缓存实现

    2,属于哪种类型 的缓存

    ehcache缓存属于之前提到过的那种 LocalCache类型,缓存和应用是在一个jvm中的,正常情况下和其他jvm或者其他系统没有通信的,不能共用。是完全独立在使用它的那个jvm中的。
     
     

    3大概的使用方法,

    使用的大概就是,在一个配置文件配置缓存的各种信息,然后java代码使用的时候,去读取这个文件,并组成对象,然后就可以获取到配置的缓存对象,然后使用的时候,将要缓存的内容,key-value形式放入到配置的缓存对象里去。获取也一样。
     

    4,配置文件介绍--只是简单的介绍,具体的配置信息需要的话搜索下

    xml文件中可以配置的大体有
    1,如果需要写入硬盘的话,配置一个磁盘路径
    <disStore path=”java.io.tmpdir”/>也可以配置一个物理路径
     
     2,cachemanager的一个监听器工厂,监听器,可以用来监听缓存对象的增加了什么的,做一下缓存的统计工作。
    CacheManagerEventListenerFactory           CacheManagerEventListener   写监听器的时候 需要继承实现一下ehcache自己的抽象类
    3,cache的配置,配置了缓存的各种存储信息,更新策略信息等。

    ·           name:Cache的唯一标识

    ·           maxElementsInMemory:内存中最大缓存对象数。

    ·           maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大。

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

    ·           overflowToDisk:配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中。

    ·           timeToIdleSeconds:设置Element在失效前的允许闲置时间。仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。

    ·           timeToLiveSeconds:设置Element在失效前允许存活时间。最大时间介于创建时间和失效时间之间。仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大。

    ·           diskPersistent:是否缓存虚拟机重启期数据。(这个虚拟机是指什么虚拟机一直没看明白是什么,有高人还希望能指点一二)。

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

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

    ·           memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。这里比较遗憾,Ehcache并没有提供一个用户定制策略的接口,仅仅支持三种指定策略,感觉做的不够理想。
    4,cache的监听器工厂,监听器,可以用来监听该缓存对象缓存内容的一些操作。
    cacheEventListenerFactory     cacheEventListener  写监听器的时候 需要继承实现一下ehcache自己的抽象类
    5,还有就是一些集群方面的配置。
    cacheManagerPeerProviderFactory  cacheManagerPeerListenerFactory 
     

    5,java代码使用

    具体方法就是,先用cachemanager通过配置文件,创建一个cachemanager对象,然后从这个对象中可以根据配置的cache的name属性的值
    获取到具体的缓存对象,然后可以从这个对象中根据key找到缓存的element对象,添加缓存的时候也是 先组装一个element对象,然后直接将对象put到cache对象中即可。如下是在ServletContextListener项目启动的时候 加载一些东西到缓存,比如数据字典什么的 。
         @Override
         public void contextInitialized(ServletContextEvent arg0) {
              CacheManager cm = CacheManager.create(arg0.getServletContext().getRealPath("\WEB-INF\classes\ehcache.xml"));
              Cache ca = cm.getCache("mycache");
              Element e = new Element("username", "liubanban");
              Element e1 = new Element("usertel", "18515154585");
              ca.put(e);
              ca.put(e1);
              arg0.getServletContext().setAttribute("mycache", ca);
         }

    6,集群问题

    因为ehcache缓存是和jvm共享的,那么就会有这样的一个问题,就是当项目通过集群结构来部署的时候,每次请求都有可能分发到不同的jvm中,那么整体系统的缓存内容数据就不一致了。失去了缓存的意义,这里ehcache也有解决方案。可以在xml文件通过配置,然后实现缓存内容同步。具体配置信息自行百度下了。大致上就是通过监听或者广播的方法,先获知其他节点缓存有更新,然后再讲最新的数据分发到所有节点进行更新,以保证集群所有节点缓存数据一致。
     

    ehcache的东西还有很多。

     
     
     
  • 相关阅读:
    AtCoder Grand Contest 015 题解
    AtCoder Grand Contest 014 题解
    AtCoder Grand Contest 013 题解
    AtCoder Grand Contest 012 题解
    AtCoder Grand Contest 011 题解
    AtCoder Grand Contest 010 题解
    AtCoder Grand Contest 009 题解
    NOIP2017 Day2 题解
    博客园主题备份
    多项式全家桶
  • 原文地址:https://www.cnblogs.com/liouwei4083/p/6035630.html
Copyright © 2011-2022 走看看