`
iamxi
  • 浏览: 188986 次
  • 性别: 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应用程序中使用的缓存对象,以及获取缓存元数据的方法。


 

分享到:
评论

相关推荐

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    java开源包10

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    JAVA上百实例源码以及开源项目

     Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器,使用方法:  可直接输入文件名或网络地址,但必需事先连入网络。 Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,...

    java开源包1

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    JAVA上百实例源码以及开源项目源代码

     Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器,使用方法:  可直接输入文件名或网络地址,但必需事先连入网络。 Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,...

    java开源包8

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包11

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包6

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包9

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包4

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包101

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包5

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包3

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包2

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包7

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    Java资源包01

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java微信公众号MVC开发框架

    上面就是这个最简单例子的全部内容,让我们启动web应用,进入到我们的公众号,输入foo文本提交,看看返回的是不是bar这个内容了,如果是,恭喜你,你已经初步掌握了jwx的使用方法。下面更多的内容等着你呢! 三、...

    asp.net知识库

    ASP.NET 2.0使用Web Part创建应用程序之二(共二) 体验 .net2.0 的优雅(2) -- ASP.net 主题和皮肤 NET2.0系列介绍(一).NET 2.0 中Web 应用程序主题的切换 ASP.NET 2.0 中Web 应用程序主题的切换 2.0正式版中...

    Spring3.x企业应用开发实战(完整版) part1

    这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升应用开发的优雅性。  《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时...

Global site tag (gtag.js) - Google Analytics