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

 
 
 

ehcache缓存入门学习的更多相关文章

  1. spring缓存Ehcache(入门2)源码解读

    Ehcache缓存: 解读: Ehcache缓存是在继承spring缓存核心类CacheManager的基础上实现的. 常用类: EhCacheCacheManager:继承自CacheManager ...

  2. spring缓存Ehcache(入门2)

    使用Ehcache缓存工具类. 一.由于使用了maven,所以需要引入依赖包: <dependency> <groupId>net.sf.ehcache</groupId ...

  3. Shiro入门之二 --------基于注解方式的权限控制与Ehcache缓存

    一  基于注解方式的权限控制 首先, 在spring配置文件applicationContext.xml中配置自动代理和切面 <!-- 8配置自动代理 -->    <bean cl ...

  4. SpringBoot学习笔记(10)-----SpringBoot中使用Redis/Mongodb和缓存Ehcache缓存和redis缓存

    1. 使用Redis 在使用redis之前,首先要保证安装或有redis的服务器,接下就是引入redis依赖. pom.xml文件如下 <dependency> <groupId&g ...

  5. Redis入门学习(学习过程记录)

    Redis(入门笔记) 学习一个大的技术点,然后顺带着就把这个技术点的面试题给学习了. 学习完一个技术后,如果面试题还不能够解答的话,只能说明学的不精,需要查漏补缺. 下一个学习的方向:Redis-非 ...

  6. (转)深入探讨在集群环境中使用 EhCache 缓存系统

    简介: EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点,是 Hibernate 中默认的 CacheProvider.本文充分的介绍了 EhCache 缓存系统对集群环境的 ...

  7. JAVAEE——BOS物流项目12:角色、用户管理,使用ehcache缓存,系统菜单根据登录人展示

    1 学习计划 1.角色管理 n 添加角色功能 n 角色分页查询 2.用户管理 n 添加用户功能 n 用户分页查询 3.修改Realm中授权方法(查询数据库) 4.使用ehcache缓存权限数据 n 添 ...

  8. Nginx 入门学习教程

    昨天听一个前同事说他们公司老大让他去研究下关于Nginx 方面的知识,我想了下Nginx 在如今的开发技术栈中应该会很大可能会用到,所以写篇博文记录总结下官网学习教程吧. 1. 什么是Nginx? 我 ...

  9. PHP 入门学习教程及进阶(源于知乎网友的智慧)

    思过崖历程: 自学的动机.自学的技巧.自学的目标三个方面描述学习PHP的经历 一.自学的动机: 一定要有浓厚的兴趣,兴趣是最后的老师,可以在你迷茫的时候不断地支撑着你走下去. 自学不是为了工作,不是为 ...

随机推荐

  1. QT 带有菜单项的ToolButton

    QToolBar *pToolBar = new QToolBar; QToolButton *pMenuBtn = new QToolButton; pMenuBtn->setText(tr( ...

  2. Qt 自定义PushButton

    http://blog.csdn.net/zddblog/article/details/11116191 功能:鼠标弹起并在按键区域内时,按键响应.并实现normal.hover.pressed效果 ...

  3. ubuntu12.04 错误:phonon: No such file or directory; phonon模块的安装

    http://blog.csdn.net/xsl1990/article/details/9009919 错误:phonon: No such file or directory 1)sudo  ap ...

  4. tyvj 1057 金明的预算方案 背包dp

    P1057 金明的预算方案 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2006 提高组 第二道 描述 金明今天很开心,家里购置的新房就要领钥匙了 ...

  5. Python staticmethod

    1 @staticmethod 静态方法 when this method is called, we don't pass an instance of the class to it (as we ...

  6. Ngnix学习笔记

    一.Ngnix介绍 1.概念 一个强大的Web服务器软件. 2.功能 1)处理高并发的http请求. 2)作为反向代理服务器来进行负载均衡. 3)数据压缩和解压缩处理 3.优势 高性能,轻量级,内存消 ...

  7. 解决没有referenced Libraries的方法

  8. 微信开放接口获取用户昵称保存到MySQL中为空白

    微信昵称中包含emoji表情标签,某些标签是使用了4字节编码的UTF8. 而大多数MySQL数据库现在使用的是3字节UTF8编码,这样会导致保存为空,且不会提示失败. 解决方法有2个,一个是升级到My ...

  9. 智课雅思词汇---十九、前缀se是什么意思

    智课雅思词汇---十九.前缀se是什么意思 一.总结 一句话总结:前缀:se- 表示“分开, 离开, 区别开” 前缀:se- [词根含义]:分离 [同源单词]:secede, secession, s ...

  10. Swift中如何使用 #if DEBUG

    Swift暂时还不支持大多数的预处理宏操作,但是可以支持“#if/#else/#endif”语句. 下面进行简单的设置使 #if DEBUG 有效,更详细的内容见:http://stackoverfl ...