• 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的东西还有很多。

     
     
     
  • 相关阅读:
    Web开发细节搜集
    excel设置单元格为文本
    网页QQ唤起
    .net提高文章
    代码重构学习
    js的undefined怎么判断
    微软.net一些类的源码
    FineMessBox的js依赖导致错误Uncaught ReferenceError: addEvent is not defined
    [译转]深入理解LayoutInflater.inflate()
    java 和 Android Base64加密
  • 原文地址:https://www.cnblogs.com/liouwei4083/p/6035630.html
Copyright © 2020-2023  润新知