Java缓存框架及其在ASS中的应用
本文从缓存机制入手,先介绍当前Java语言中最常见的几种缓存框架,然后重点剖析了其中的EhCache,最后以ASS(档案服务系统,影像及电子档案平台IASP的子系统)数据缓存的设计及实现作为实例,
说明
关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书
如何在应用系统中搭建和使用数据缓存框架。
关键字:缓存、缓存框架、Ehcache
1. 缓存、Java缓存框架
1.1 缓存
缓存是这样的一种机制:它是介于应用程序和物理数据源之间,通过降低应用程序对物理数据源访问的频次,提高应用程序的运行性能。缓存内的数据是对物理数据源中数据的复制,应用程序在运行时直接从缓存读取数据,在特定的时刻或事件会同步缓存和物理数据源的数据。
缓存是在提升系统响应时常用的一种技术,按照其实现方式,通常可以分为页面缓存、处理缓存和数据缓存这三种具体的类别。页面缓存是指对页面中的内容片断进行缓存的方式;处理缓存是指对于系统层次中的某方法进行缓存,也就是对某个类的某个方法的处理结果做缓存,这样在下次处理相同请求时就可以直接取缓存中的结果;数据缓存就是对系统的数据进行缓存的方式。
1.2 Java缓存框架
Java中有许多开源的缓存框架,如OSCache、Java Caching system、Ehcache等。
1.2.1 OSCache
OSCache是一个被广泛采用的高性能的J2EE缓存框架,它是能用于任何Java应用程序的缓存解决
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
。 OSCache有以下特点:
● 能缓存任何对象,OSCache可以不受限制地缓存jsp页面或HTTP请求,任何Java对象都可以缓存;
● 拥有全面的API,OSCache API支持通过程序来控制所有的OSCache特性;
● 永久缓存,缓存能轻松地写入硬盘,且支持应用重启;
● 支持集群,集群缓存数据能被独立地进行参数配置,不需要修改代码;
● 缓存
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
的过期及失效管理,可以最大限度地控制缓存对象的过期及失效,包括可插入式的设置刷新策略;
OSCache官方网站: 。
1.2.2 JCS
Java Caching System,一个支持分布式的缓存框架,它是通过缓存各种动态数据来加速动态web应用的。JCS和其他缓存系统一样,也是一个用于高速读取,低速写入的应用程序。
对于动态内容和动态
报表
企业所得税申报表下载财务会计报表下载斯维尔报表下载外贸周报表下载关联申报表下载
,系统使用JCS能够获得更好的性能。如:一个网站,有重复的网站结构,使用间歇性更新方式的数据库(而不是连续不断的更新数据库),在一定时间内对于重复请求会返回相同的结果,此时就能够通过使用JCS改进其性能和伸缩性。
JCS的官方网站: 。
1.2.3 EhCache
Ehcache是一个纯Java的进程中的缓存,它具有如下特性:
● 快速,简单,低消耗,依赖性小,扩展性强;
● 支持对象或序列化缓存;
● 支持缓存或元素的失效,提供LRU、LFU和FIFO三种缓存策略;
● 支持两级缓存数据:内存和磁盘,无需担心容量问题;
● 支持虚拟机重启过程对磁盘中缓存数据的读写;
● 提供RMI、可插入API等多种实现分布式缓存的方式;
● 具有缓存和缓存管理器的侦听接口;
● 支持多缓存管理器实例,以及一个实例的多个缓存区域;
● 提供Hibernate的缓存实现,对Spring,MyBatis等多种开源框架提供了较好的支持。
Ehcache的官方网站为。
ASS将采用Ehcache缓存框架,这主要是从以下几方面考虑的:
● Ehcache快速、简单,学习和使用成本相对较低;
● Ehcache具有低消耗、依赖性小、扩展性强的特点,不会对现有系统造成太大的影响和负担;
● 提供了RMI的集群配置方式,RMI是java内置支持的,无需引入第三方的jar包依赖,且相对稳定、实现简单;
● ASS是基于Spring、IBatis框架的,而Ehcache对Spring,MyBatis等多种开源框架提供了较好的支持。
2. Ehcache剖析
本章将重点对Ehcache做相对深入的剖析。
2.1 EhCache.xml
ehcache.xml是Ehcache的核心配置文件,其所有特性都可以在该文件中体现和设置,如下所示的一个Ehcache配置文件:
2.1.1 标签
diskStore标签,配置cache文件的存放目录 ,其属性path的参数可以为如下值:
● user.home---用户主目录;
● user.dir---用户当前的工作目录 ;
● Java.io.tmpdir---java默认的临时文件目录 ;
● 任意一个指定的文件目录,2.1中的配置文件就是这种情况。
defaultCache标签,默认缓存的配置信息。
cache标签,一个自定义缓存的配置信息。
2.1.2 属性
cache标签中的各关键属性说明如表1所示:
表1 Ehcache属性说明表
属性名
说明
eternal
设置元素是否永久生效的
maxElementsInMemory
内存中最大缓存对象数
overflowToDisk
当memory中的数量达到限制后,是否保存到Disk可选的属性
timeToIdleSeconds
设置元素过期前的空闲时间
timeToLiveSeconds
设置元素过期前的活动时间
diskPersistent
disk store在虚拟机启动时是否持久化
diskExpiryThreadIntervalSeconds
运行disk终结线程的时间,默认为120秒
cacheEventListenerFactory
注册相应的缓存监听类,用于处理缓存事件,如put,remove,update,和expire
bootstrapCacheLoaderFactory
通过指定该类,可以实现初始化缓存及自动设置属性的功能
memoryStoreEvictionPolicy
数据存储与释放策略
2.2 清除策略
清除策略定义了缓存和缓存元素的失效机制,EhCache支持如下三种清除策略:
● FIFO,first in first out,先进先出;
● LFU, Less Frequently Used,一直以来最少被使用的先出,缓存的元素有一个hit属性(对象命中次数),hit值最小的将会最先被清出缓存;
● LRU,Least Recently Used,最近最少使用的,缓存的元素有一个使用时间戳,当缓存需要清理时,现有缓存元素中使用时间戳离当前时间最远的元素将被清出缓存。
2.3 EhCache的集群支持
Ehcache从1.2版开始支持集群,从1.7版开始,支持如下的五种集群方案:Terracotta、RMI、JMS、JGroups、Ehcache Server。本文介绍其中最为常用的三种集群方式:RMI、JGroups和Ehcache Server。
在集群环境中,Ehcache所有缓存对象的键和值都必须是可序列化的,也就是必须实现 Java.io.Serializable 接口。
2.3.1 RMI
RMI是Java内置的一种远程方法调用技术,是一种点对点的基于 Java 对象的通讯方式。Ehcache从1.2版开始就支持RMI方式的缓存集群。
采用 RMI 集群模式时,集群中的每个节点都是对等关系的,并不存在主节点或者从节点的概念,因此节点间必须有一个机制能够互相认识对方,必须知道其它节点的信息,包括:主机地址、端口号等。
EhCache提供两种节点发现方式:手工配置和自动发现。手工配置要求在每个节点中配置其它所有节点的连接信息,一旦集群中的节点发生变化时,需要对缓存进行重新配置。自动发现是通过多播(multicast)来维护集群中的所有有效节点。这也是最为简单和灵活的方式,与手工模式不同的是,每个节点上的配置信息都相同,大大方便了节点的部署,也避免人为错漏的出现。
由于RMI是Java中内置支持的技术,因此使用RMI集群模式时,无需引入其它Jar包,Ehcache本身就带有支持RMI集群的功能。