`
iamxi
  • 浏览: 192162 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【转】用Java缓存机制创建更快的Web应用----基本用法

    博客分类:
  • Java
 
阅读更多

 

  学习JCS的基本原理的一个好的方法是看它的API的最一般的用法。从缓存区自身的初始化开始是最好的地方。通过初始化JCS缓存区对象,你会获得访问缓存区所需要的几乎所有的共通方法。下面列出了初始化JCS对象并取得默认的缓存区实例的方法:

 

 

// Initialize the JCS object and get an instance of the default cache region
JCS cache = JCS.getInstance("default");

 

 

  取得JCS实例以后,就可以调用大多数需要的方法。put方法把一个新的对象放到缓存区中。键(第一个参数)和值(第二个参数)是调用这个方法所需要的全部内容。下面是一个基本的例子:

 

 

// Set up
String key = "key0";
String value = "value0";
// Place a new object in the cache
cache.put(key, value);

 

 

在上面的例子中使用字符串作为参数的值,但是你可以使用任何对象。

 

  使用JCS提供的get方法取得缓存中的对象也同样简单。下面是一个简单的例子,例子中也使用了一个字符串参数,但是你也是其他任意对象:

 

 

// Retrieve a cached object
String cachedData = (String)cache.get(key);
 

 

  在处理一个正在缓存的系统时,另一个可能需要的方法是验证缓存数据的有效性。对于测试缓存项目是否存在,JCS中没有定义特定的方法,但是可以使用get方法的返回值来达到验证的目的。下面的例子演示获得这个必要的功能的方法:

 

 

// Retrieve a cached object
String cachedData = (String)cache.get(key);
// Check if the retrieval worked
if (cachedData != null) {
  // The cachedData is valid and can be used
  System.out.println("Valid cached Data: " + cachedData);
}

 

 

   最后需要的更多的共通的缓存功能是清楚JCS的缓存项目和工作完成后的缓存区。JCS提供了一个clear方法,调用这个方法可以从缓存区删除所有的缓存数据,同时还提供了一个remove方法,用于删除指定的缓存项目。dispose方法也是有效的,它用于释放被初始化的JCS缓存区。下面列出了这些方法的使用方法:    

 

 

// Dispose of a specific cached item
cache.remove(key);
// Dispose of all cache data
cache.clear();
// Dispose of the cache region
cache.dispose();

 

 

JCSJava对象

    JCS优于其他缓存系统的特点之一就是它能和类对象一起很好的工作。大多数用Java技术创建的Web应用程序都使用面向对象的方法。如果经常的从数据库中反复获取相同的对象,那么缓存这些对象有助于应用程序获得更好的性能,例如:

   首先,在设计一个简单的面向对象的网站中,要围绕JCS以需要保存的对象作为开始。在这个例子中,开发了一个简单的博客站点,因此要保存blog对象自身,下面给出了将要使用的BlogObject类。

 

 

package com.ibm.developerWorks.objects;
import java.io.Serializable;
import java.util.Date;
public class BlogObject implements Serializable {
  private static final long serialVersionUID = 6392376146163510046L;
  private int blogId;
  private String author;
  private Date date;
  private String title;
  private String content;
  public BlogObject(int blogId, String author, Date date, String title, String content) {
    this.blogId = blogId;
    this.author = author;
    this.date = date;
    this.title = title;
    this.content = content;
  }
  public int getBlogId() {
    return this.blogId;
  }
  public String getAuthor() {
    return this.author;
  }
  public Date getDate() {
    return this.date;
  }
  public String getTitle() {
    return this.title;
  }
  public String getContent() {
    return this.content;
  }
}

 

  一旦有一个类对象实例,接下来就需要一个类来管理它,这个管理器来处理所有的管理事务和相对于blog对象的缓存功能。在这个例子中,管理器将处理三个主要的任务:

 ・获取blog对象

 ・把blog对象设定到缓存中

 ・从缓存中删除blog对象

 在下面的代码中,getBolg()方法取得blog对象。这个方法首先试着从缓存中取得blog对象,如果在缓存中没有,它会用另外的机制来获得:

 

 

public BlogObject getBlog(int id) {
  BlogObject blog = null;

  try {
    blogCache = JCS.getInstance(blogCacheRegion);
    blog = (BlogObject)blogCache.get(id);
  } catch (CacheException ce) {
    blog = null;
  }

  if (blog == null) {
    blog = DatabaseManager.getBlog(id);
    this.setBlog(
      blog.getBlogId(),
      blog.getAuthor(),
      blog.getDate(),
      blog.getTitle(),
      blog.getContent()
    );
  }

  return blog;
}

 

 

  上面的代码中使用了一个数据库做为获取对象的一种可选机制,在从这种可选机制中获取对象时,应该把那个对象设定到缓存中,以便于下次能够从缓存中直接取得。

 

  下面的代码中的setBlog方法,会把blog对象放到缓存中。这个方法很简单,因为它只是用传递给他的信息创建一个新的blog对象,然后把它放到缓存中。

 

 

public boolean setBlog(int bId, String author, Date date, String title, String content) {
  BlogObject blog = new BlogObject(bId, author, date, title, content);
  try {
    blogCache = JCS.getInstance(blogCacheRegion);
    blogCache.put(bId, blog);
    return true;
  } catch (CacheException ce) {
    return false;
  }
}

 

 

  下面代码中cleanBlog方法,既可以清除指定的一个blog对象也可以清除缓存中的所有blog对象。这个方法使用JCSremoveclear方法来清除缓存对象。

 

 

public boolean cleanBlog(int blogId) {
  try {
    blogCache = JCS.getInstance(blogCacheRegion);
    blogCache.remove(blogId);
  } catch (CacheException ce) {
    return false;
  }
  return true;
}
public boolean cleanBlog() {
  try {
    blogCache = JCS.getInstance(blogCacheRegion);
    blogCache.clear();
  } catch (CacheException ce) {
    return false;
  }
  return true;
}

 

 

 前面的类中演示了用JCS怎样简单的缓存对象以及管理对象,在Web应用程序中,这是一种强大的但却简单的处理对象的方法。

 

缓存元数据

   JCS提供了比我们前面介绍的基本内容要丰富的多的功能。例如,它提供了搜集缓存对象和缓存区的元数据的功能,可以很容易的取得一下内容:

 ・缓存的键名;

 ・缓存项目被创建的时间;

 ・缓存的最大生存周期;

 ・被缓存项目的生存周期

下面的代码显示了怎样获取缓存项目的元数据。

 

try {
  JCSAdminBean admin = new JCSAdminBean();
  LinkedList linkedList = admin.buildElementInfo(regionName);
  ListIterator iterator = linkedList.listIterator();

  while (iterator.hasNext()) {
    CacheElementInfo info = (CacheElementInfo)iterator.next();
    System.out.println("Key: " + info.getKey());
    System.out.println("Creation Time: " + info.getCreateTime());
    System.out.println("Maximum Life (seconds): " + info.getMaxLifeSeconds());
    System.out.println("Expires in (seconds): " + info.getExpiresInSeconds());
  }
} catch (Exception e) {
}

 对于被缓存项目的元数据是有用的,但是对于每个缓存区的元数据也是有益的。这些信息能够让你知道有多少缓存数据进入了缓存区,包括缓存失败还是成功,以及缓存的更新,下面的代码显示怎样搜集这些信息。

 

try {
  JCSAdminBean admin = new JCSAdminBean();
  LinkedList linkedList = admin.buildCacheInfo();
  ListIterator iterator = linkedList.listIterator();
  while (iterator.hasNext()) {
    CacheRegionInfo info = (CacheRegionInfo)iterator.next();
    CompositeCache compCache = info.getCache();
    System.out.println("Cache Name: " + compCache.getCacheName());
    System.out.println("Cache Type: " + compCache.getCacheType());
    System.out.println("Cache Misses (not found): " + compCache.getMissCountNotFound());
    System.out.println("Cache Misses (expired): " + compCache.getMissCountExpired());
    System.out.println("Cache Hits (memory): " + compCache.getHitCountRam());
    System.out.println("Cache Updates: " + compCache.getUpdateCount());
  }
} catch (Exception e) {
}

 

  搜集缓存区和缓存对象的元数据,来帮助分析Web站点的那个缓存区或缓存对象需要被优化。元数据还会帮助你管理时间敏感性的缓存数据,对于特定的需要更新数据的用户,可以使用最大的生命周期和每个缓存项目的终止时间来刷新缓存数据。

 

总结:

 对于Java开发者,JCS是一个强大的,然而却简单易用的缓存系统。它为桌面和Web应用程序提供了同样的数据缓存。桌面应用程序的增长----Web应用要求增强速度和灵活性一样,通过使用缓存数据也有助于达到同样的效果。这篇文章概要介绍了怎样配置和使用JCS,同时包括了基本缓存方法所需要的语法,在一个普通的Web应用程序中使用的缓存对象,以及获取缓存元数据的方法。


 

分享到:
评论

相关推荐

    深入体验Java+Web开发内幕-高级特性-高清扫描版

    《深入体验Java+Web开发内幕-高级特性》是张孝祥先生的一本深入解析Java与Web开发技术的著作,尤其关注高级特性的实践与理解。这本书对于那些希望提升Java和Web开发技能的专业人士来说,是一份宝贵的资源。下面将...

    paoding-rose, paoding-rose 提供最好用的Java Web应用整体性框架。.zip

    **标题与描述解析** "paoding-rose" 是一个针对Java Web应用的开源...以上就是关于paoding-rose的一些核心功能和相关知识点,学习和使用这个框架可以帮助Java Web开发者提高工作效率,创建更健壮、高性能的应用程序。

    web service on java

    - 认证机制包括基本认证、digest认证以及更复杂的证书认证,可以结合Java的JAAS(Java Authentication and Authorization Service)进行实施。 5. 模块化与扩展性: - 通过Spring框架集成Web服务,可以实现服务的...

    如何利用Java开发高性能、高并发Web应用

    在开发高性能、高并发的Web应用时,Java程序员需要关注许多关键点来优化代码和提升系统性能。以下是一些基于给定内容的Java程序性能优化技巧: 1. **合理分配对象空间**: - 在创建对象时,了解并预估对象的大小...

    百度云下载--《深入分析Java Web技术内幕》修订版 许令波著 PDF扫描版[92M]

    Servlet是Java Web开发的基础之一,通过学习Servlet的工作原理、生命周期、配置方法等内容,可以更好地理解Java Web应用程序的工作机制。 ### JSP技术解析 JSP(Java Server Pages)是一种实现Java代码和HTML混合...

    DWR js框架 javascript框架 web与java交互 Direct Web Remoting Ajax开源框架

    Direct Web Remoting (DWR) 是一个开源的Java库,它允许Web应用程序在客户端的JavaScript和服务器端的Java之间进行直接的、异步的通信,实现了Web应用中的Ajax功能。DWR通过自动化处理JavaScript和Java之间的类型...

    arcgis-runtime-sdk-java-guide-100.4.0

    - 可以通过减少图层数量、使用缓存等方法来提高性能。 - **用户体验:** - 设计直观的用户界面。 - 提供易于理解的地图控制和交互。 - **安全性:** - 保护敏感数据的安全。 - 包括数据加密、访问控制等措施...

    JessMA Java Web 应用开发框架

    JessMA Java Web 应用开发框架是一个全...通过上述知识点的介绍,JessMA Java Web应用开发框架可以被看作是一个全面考虑了开发效率、性能和体验的综合解决方案,旨在帮助开发者更快地开发和部署高质量的Web应用程序。

    exit-web-framework是对常用的java web开发封装实用功能来提高开发效率.zip

    "exit-web-framework" 是一个专为Java Web开发者设计的框架,其主要目的是为了提升开发效率,通过封装常用的功能,让开发者能更快速、更高效地完成项目开发。这个框架可能包含了一系列工具类、拦截器、服务层接口...

    Portal-Basic Web 应用开发框架 (v2.5.20120904)

    ### Portal-Basic Web应用开发框架知识点详解 #### 一、概述 **Portal-Basic Web应用开发框架**...以上内容概述了Portal-Basic Web应用开发框架的关键特性和使用方法,希望能够帮助开发者更好地理解和利用该框架。

    精通Java Web整合开发(Jsp+Ajax+Struts+Hibernate)(第2版).part1

    综上所述,《精通Java Web整合开发(Jsp+Ajax+Struts+Hibernate)(第2版)》这本书主要介绍了如何使用JSP、Ajax、Struts、Hibernate以及Spring等技术进行Web应用的开发,涵盖了这些技术的基本概念、核心功能及实际应用...

    面向 Java 开发人员的 Ajax: 使用 Jetty 和 Direct Web Remoting 编写可扩展的 Comet 应用程序

    面向Java开发人员的Ajax技术,特别是与Jetty服务器和Direct Web Remoting (DWR)框架的结合,为创建高性能、可扩展的Comet应用程序提供了强大的工具。Comet是一种Web交互模式,它允许服务器向客户端推送数据,而不...

    java web中用到的各种API

    在Java Web开发中,API(应用程序编程接口)扮演着至关重要的角色。它们是预先定义的函数集合,允许开发者轻松地实现特定功能,而无需从零开始编写所有代码。以下是一些在Java Web开发中常见的API及其详细解释: 1....

    Java Web Services Tutorial

    在2006年发布的Java Web Services Developer’s Pack v2.0中,Sun Microsystems(现已被Oracle收购)提供了全面的教程和技术文档,以帮助开发者更好地理解和使用Java Web Services技术。 #### 三、Java Web ...

    Java分布式应用学习笔记01分布式Java应用和SOA

    在Java中,SOA通常通过Web服务(如SOAP、REST)实现,其中Java EE平台提供了创建和部署Web服务的框架和工具。 ### Java分布式应用的关键技术 Java分布式应用的设计和实现依赖于一系列关键技术,包括但不限于: 1....

    JAVA分布式缓存文档

    - **基础示例**:通过简单的代码示例展示Hazelcast的基本使用方法。 #### 三、分布式数据结构 Hazelcast提供了多种分布式数据结构来满足不同的应用场景需求,包括但不限于: ##### 3.1 分布式队列 (Distributed ...

    Java中各类Cache机制实现解决方案

    本文将详细介绍几种常见的Java缓存机制及其实现方法,帮助开发者更好地理解和应用这些技术。 #### 二、OSCache **OSCache** 是一个功能强大的开源Java EE缓存框架。它可以用于缓存JSP页面、HTTP响应以及Java对象等...

    新手学习Java路线图

    - 学习Hibernate的缓存机制和性能优化策略。 - 掌握多表查询的技术。 3. **Spring** - 学习Spring框架的核心特性,如依赖注入(DI)和面向切面编程(AOP)。 - 掌握Spring的数据源管理。 - 学习Spring事务管理的...

    Velocity Web应用开发

    #### 二、使用 Velocity 构建 Web 应用的方法 ##### 1. 使用 Velocity 构建 Web 应用的优势 - **简洁**:普通的网页设计师无需具备编程背景即可设计动态页面。 - **易维护**:遵循 MVC 设计原则,页面中不包含脚本...

Global site tag (gtag.js) - Google Analytics