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. hadoop 输出中文乱码问题

    本文转载至: http://www.aboutyun.com/thread-7358-1-1.html hadoop涉及输出文本的默认输出编码统一用没有BOM的UTF-8的形式,但是对于中文的输出wi ...

  2. 导入Jquery.min.js时 JQuery 上打红X了

    问题解决:右击jquery.min.js——>MyEclipse——>点击Exclude From Validation——>点击Run Validation 即可

  3. VC SOCKET 压缩通信学习

    Server................// Server.cpp : Defines the entry point for the console application. // #inclu ...

  4. 6.0动态加载权限用PermissionGen

    ndroid 6.0 新增加了运行时的动态添加权限,在此介绍一个第三方库,PermissionGen,可以很方便简洁的增加 6.0权限 首先给大家上  PermissionGen 库地址:https: ...

  5. LINQ to Entities 不识别方法“Int32 ToInt32(System.String)”,因此该方法无法转换为存储表达式。

      通常原始代码如下: Where id=Convert.ToInt32(cousid) 更改后代码: Var currentid= Convert.ToInt32(cousid); Wehre id ...

  6. Mssql 跨域查询

    有数据库test1和数据库test2.其中test1中有表 table1.table2:test2 中有表 table1.三个表的字段都为为:id.xingming.shijian.shuliang. ...

  7. Linux(CentOS)下.NET,mono环境的安装步骤整理

    本文Linux使用的是CentOS 7 1.软件下载 CentOS:https://www.centos.org/download/ mono-4.2.1.36.tar.bz2 http://down ...

  8. AOP注解式拦截

    1. 自己定义的拦截注解 package com.spring.aop; import java.lang.annotation.Documented; import java.lang.annota ...

  9. nyoj-3-多边形重心问题(求多边形面积和中心)

    题目链接 /* Name:nyoj-3-多边形重心问题 Copyright: Author: Date: 2018/4/26 21:25:41 Description: ACM国际大学生程序设计竞赛 ...

  10. android sdk国内服务器下载

    推荐使用国内东软的服务器下载android sdk相关: 如果是android sdk manager: HTTP Proxy Server : mirrors.neusoft.edu.cn HTTP ...