标准论文网致力于提供经济、法律、医学、管理、体育、教育等论文范文。
加入收藏 联系我们 信誉保证 网站地图
标准论文网创建10周年
站内搜索:
热门:
您当前的位置:> JAVA论文 > 论文内容

基于Java的可移植缓存模型构建

加入收藏〗 发布时间:2016-08-24
摘要

  1引言

  Java由于它的简单、面向对象、分布式、可移植等特征使得Java程序应用于不同环境与开发平台.

  目前,开发者们仅仅是在应用程序性能不满足要求时才使用缓冲池技术或相关的缓存插件来应付,这些缓冲池或者缓存插件都是和缓存系统绑定在一起的,若切换到其他的平台,这些临时的缓存方法在兼容性、配置以及系统的安全性上很难达到要求,并且不能达到复用的效果.

  文献[1]中提出了一种基于面向编程思想的对动态Web内容进行缓存的智能框架,它通过对前端Servlet引擎和后端JDBC接口进行横切拦截,为应用程序装入缓存及其管理体系.

  这种缓存方案为解决缓存问题带来了新的思路,但是,它是一种侵入式的缓存方法,而且在切点的检测、捕获和方面重新织入等等都配置繁琐,安全性也很难保证.文献[2]中介绍了一种将OSCache、EhCache和Hibernate整合在一起的缓存解决方案.

  这种方案虽然简单可行,但是它建立在其他缓存插件的基础上,可复用性差,当缓存环境变化时,需要重新搭建框架.针对现有应用程序缓存机制的缺陷,本文提出了一种基于Java的可移植缓存模型PCM-JA(Port-able Cache Model for Java Application)。

  此模型在应用程序与缓存系统之间植入透明的缓存管理体系,不仅为应用程序提供了一个通用的方法来管理缓存,而且很好地利用了Java技术的平台无关性,可移植到不同的应用程序和平台运行.

  2 PCM-JA模型总体架构

  PCM-JA模型如图1所示,它由缓存接口、缓存管理器、Cache、条目、截止策略五个核心模块组成.其中缓存接口主要负责与应用程序和缓存系统进行交互,它很好地封装了缓存模型的内部结构,对于应用程序和缓存系统是透明的,应用程序只需要调用这个模型的缓存接口就可以获得模型的使用.

  缓存管理器是模型的核心,它统一管理调度各个Cache,可以使Cache的使用效率更高.

  在这样的架构中,各个模块都有自己的从属关系,分工明确,便于配置与使用,各模块的具体功能如下.

  2.1缓存接口。

  缓存接口提供了一个创建、获得、配置、管理和控制一个或多个缓存管理器的机制.

  开发者通过缓存接口与缓存管理器交互,继而与Cache进行交互.

  缓存接口提供的具体方法如下:

  (1)一个获得默认的缓存管理器实例方法;(2)一个创建缓存管理器实例的方法,这个实例由特定的URI(Uniform Resource Identifier统一资源标识符)唯一标示识别;(3)一个由类装载器管理缓存管理器实例的方法;(4)一个关闭和释放缓存管理器的方法;(5)一个查询缓存管理器性能的方法.

  2.2缓存管理器。

  缓存管理器是整个缓存模型的管理中心,开发者通过缓存管理器来管理具体的缓存.

  缓存管理器具有以下的功能:

  (1)创建、配置和查询一个唯一标识的Cache;(2)关闭Cache使得它不再被管理;(3)销毁一个Cache,包括它包含的所有条目;(4)规定一个Cache将要使用的类加载器,这个类加载器用来加载应用程序的类;(5)关闭缓存管理器和它当前所管理的所有Cache;(6)获得缓存接口对于缓存管理器的配置信息;(7)查询缓存接口所支持的功能.

  2.3 Cache.

  Cache在应用程序的设计中,它通常用来描述一种开发者使用的单独的内存和低时间延迟的数据结构,来暂时存储应用程序后续步骤要用到的数据或者信息,以减少应用程序频繁访问数据库服务器的开销.

  Cache是整个缓存模型的数据处理中心,它主要进行缓存数据的读取以及截至策略的执行.

  Cache同时是一个映射类的数据结构,它提供映射的方法来访问、更新、删除缓存条目.

  为应用程序的数据提供暂时的存储空间以便与应用程序进行高速的数据交互.

  它将每个条目以键值对的形式存储以便于查询,并且允许使用Java范型来提高应用程序的类型安全.

  下面是一个使用Cache的简单例子:

  String cacheName="cacheName";CachePort port= Cache.getCachingPort();CacheManager manager= port.getCacheManager();cache= manager.getCache(cacheName,Integer.class,Date.class);Date value1= new Date();Integer key=1;Cache.put(key,value1);Date value2=cache.get(key);2.4缓存条目与条目处理器。

  缓存条目就是以键值对存储在Cache中的数据,缓存中的条目是由条目处理器来处理的.

  条目处理器使应用程序可以检查缓存条目的值、计算新的值、更新条目或者自动地返回其他的值.

  条目处理器配置的具体程序如下:

  CachingPort port= Caching.getCacheingPort();CacheManager Manager= provider.getCacheManag-er();MutableConfiguration < String,Integer >

  configuration=new MutableConfiguration<String,Integer>

  ()etTypes(String.class,Integer.class);Cache<String,Integer>cache= manager.config-ureCache("cache",configurtion);String key="counter";Cache.put(key,1);
  
  2.5截止策略模块。

  当cache中的条目没有被命中并且容量已经满了时,就需要在cache中踢出一个旧的条目,加入一个新的条目,而到底应该踢出哪个条目,就由缓存替代策略决定.

  鉴于此,作者提出了一种简单的替代策略,即截止策略.

  3截止策略。

  缓存策略主要考虑三个方面的因素,即缓存内容、何时缓存和缓存替换.

  不同系统的数据访问模式不尽相同,同一种缓存策略难以在各种数据访问模式下均取得满意性能[3-5].

  由于本文重点在于缓存模型的设计,因此提出了一种简单的缓存策略,即截止策略.

  3.1截止策略算法基本思想。

  截止时间定义为cache存储的条目持续存在于cache的时间.

  在这段时间内,条目可以被访问、更新和删除,一旦一个条目的截止时间过期,则称这个条目被截止.

  此时,被截止的条目还存在于cache,但是不能再被访问、更新和删除.

  3.2截止策略的算法设计。

  在Cache中的条目有5种状态,即创建、修改、访问、接触和永久存在,其中永久存在是默认的状态,它表示Cache中的条目永不被截止.

  截止策 略 的 截 止 时 间 由 截 止 策 略 的 配 置 和Cache操作共同决定.

  以下截止策略的方法是基于缓存操作来定义的合适的持续时间的:

  getExpiryForCreatedEntry()当一个条目被创建后的截止时间;getExpiryForAccessedEntry()当一个条目被访问后新的持截止时间;getExpiryForModifiedEntry()当一个条目被修改后新的截止时间.

  当以上方法被调用,截止策略将会返回下面之一的结果:

  (1)一个和cache等价配置的截止时间;(2)Duration.ZERO表明条目现在将考虑被截止了;getExpiryForAccessedEntry()和getExpiry-ForModifiedEntry可能会返回空值,这表明截止策略应该使得缓存条目的截止时间不变.

  示例程序:Publicclass UsernameExpiryPolicy implementsExpiryPolicy<String,Username>{@OverridePublic Duration getExpiryForCreatedEntry(Entry<string extends String,username extends  Username>entry){return THIRTY_MINUTES;}//新建的缓存条目返回一个配置的截止时间,缓存条目的截止时间将会重新开始计算@Overridepublic Duration getExpiryForAccessedEntry(Entry<string extends String,username extends  Username>entry){return null;}//返回一个空值,表示截止时间不变@Overridepublic Duration getExpiryForModifiedEntry(Entry<string extends String,username extends  Username>entry){Username u=entry.getValue();return c.isClosed()?
  
  ZERO:THIRTY_MIN-UTES;//根据u所获得的值进行判断.}//当username关闭了,用户可以立即截止它.此外,用户还可以给它另外的30分钟,但是必须要把Username立即放回Cache中.}

  4缓存模型的设计

  4.1缓存
  
  模型PCM-JA在Web系 统 中 的 工 作原理缓存模型PCM-JA在web访问中的架构图如图2所示.

  客户端应用程序发出一个请求后,首先是由缓存模型接收请求并进行相应的处理.

  缓存模型与缓存系统交互后,将需要发送的信息传递给服务器,服务器处理请求,响应一个结果传给缓存模型,缓存模型与缓存系统交互,一起组成响应返回给客户端.

  4.2缓存模型的配置本文应用提出的缓存模型创建了一个默认的缓存管理器.

  缓存管理器配置了截止策略,并给出了cache的 实例 "exampleCache"的配置过程.这 个Cache有一个String类型的键和一个整型的值,然后还配置了一个小时的截止时间,最后 给定有一个输入和输出.

    //首先获得缓存接口
  CachingPort cachingPort=
  Caching.getCachingPort
  ();
  //然后从缓存接口中获得缓存管理器,并进行配置
  CacheManager cacheManager=
  cachingPort.getCacheManager
  ();
  MutableConfiguration<String
  ,
  Integer>config=
  new MutableConfiguration<String
  ,
  Integer>
  ();
  config.setStoreByValue
  (f
  alse)
  .setTypes
  (
  String.class
  ,
  Integer.class
  )
  //配置截止策略,截止时间为一个小时
  .setExpiryPolicyFactory
  (
  AccessedExpiryPolicy.factoryOf
  (O
  NE
  _
  HOUR)
  )
  .setStatisticsEnabled(
  true)
  ;
  //缓存管理器配置
  Cache
  cacheManager.configureCache
  ("
  exampleCache
  ",
  con-
  fig
  );
  Cache<String
  ,
  Integer>cache=
  cacheManager.getCache
  ("
  exampleCache
  ",
  String.class
  ,
  Integer.class
  );
  String key=
  "
  key
  " ;
  Integer value1=1
  ;
  //值键为"
  key
  ",值为"
  1"
  cache.put
  ("
  key
  " ,
  value1)
  ;
  Integer value2=cache.get
  (
  key
  );

  5仿真实验与分析

  5.1实验设置
  
  本文为一个基于Java EE的在线选课系统植入缓存模型PCM-JA,并使用JMeter进行性能测试.

  在测试中定义了10种不同的动态交互请求,其中约有80%的请求为只读请求.测试的服务器为SugonI620r-G,Web服务器为IIS 6.0,应用服务器 为ClassFish 4.0,数据库为MySQL 5.6.10,运行平台为NetBeans 7.3.1.

  5.2实验结果与分析
  
  为了验证PCM-JA的性能,本文主要测试在线选课系统使用PCM-JA前后的平均响应时间以及缓存命中率.使用PCM-JA前后,系统的平均响应时间如图3所示.

  随着并发访问数不断增加,未使用PCM-JA前时,系统响应时间上升较快,而使用PCM-JA的系统响应时间平稳得多,在并发数达到1 100时,使用PCM-JA的系统响应时间减少了56%左右.可见,在并发用户较多的Web应 用系统中,使用PCM-JA可以很好恩减少响应时间.

  使用PCM-JA模型时的缓存命中率如图4所示.

  当缓存大小大于640kB时,缓存命中率开始大幅度提升,当缓存大小达到10 MB时,缓存命中率为41.2%,达到了较高的水平.

  6结束语
  
  本文针对目前Java应用程序的缓存问题,提出了一种基于Java的可移植缓存模型PCM-JA,并给出了模型的架构图和相应的算法设计.本模型为Ja-va应用程序提供了一个通用的方法来操作Cache中的数据,它将应用程序和缓存系统分开,可以快速、简便的为其他应用程序搭建合适的缓存平台,解决了现有Java应用程序临时缓存的兼容性和安全性问题.实验表明,PCM-JA模型在多个性能指标上均具有较好的效果.

  参考文献:
  [1] 邓磊,陈志刚,黄键,等.基于AOP的智能Web缓存框架[J].计算机工程,2008,34(22):283-285.
  [2] 张艳,石磊,卫琳.Web缓存优化模型研究[J].计算机工程,2009,35(8):85-87.

    优秀论文范文分享:
    联系地址: 上海市杨浦区邯郸路(临复旦大学校区)邮编:200000 网站合法性备案号:蜀ICP备09029270号-1
    Copyright © 2002-2014 www.bzlunwen.com All Rights Reserved. 版权所有