首页
论坛
图书
开发资料
在线文档
网址
下载
联系我们
 新闻│Java│JavaScript│Eclipse│Eclipse 英文│J2EE│J2ME│J2SE│JSP│Netbeans│Hibernate│JBuilder│Spring│Struts
站内搜索: 请输入搜索关键词

当前页面: 开发资料首页 → Java 专题 → 时间/次数双机制缓存管理器

时间/次数双机制缓存管理器

摘要: 时间/次数双机制缓存管理器

</td> </tr> <tr> <td height="35" valign="top" class="ArticleTeitle"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="265" height="265" align="center" valign="top"> </td> <td width="57%" valign="top">
对于一些全局性的统计信息,不能每次使用都重新取一遍数据,按照次数或者时间缓存一段时间是比较好的方案,既达到了一定的实时性又提高了系统的整体性能。下面的两个类合作可以完成这种缓存功能的处理,需要缓存的内容实现类需要实现ShortTimeCachable,在reset方法中完成数据的读取操作。
  1. /**
  2. * Copyright: Copyright (c) 2005-2005
  3. * Company: Javaresearch( http://www.javaresearch.org/ )
  4. * 最后更新日期:2005-2-15
  5. * @author Cherami
  6. */
  7. package org.javaresearch.core;
  8. /**
  9. * 时间/次数双机制可缓存接口定义。
  10. */
  11. public interface ShortTimeCachable {
  12. //缓存时效到了以后刷新缓存内容的接口方法。
  13. public void reset();
  14. }
</td> </tr> <tr> <td height="44" colspan="2">
  1. /**
  2. * Copyright: Copyright (c) 2005-2005
  3. * Company: Javaresearch( http://www.javaresearch.org/ )
  4. * 创建日期:2005-2-15
  5. * 最后更新日期:2005-2-15
  6. * @author Cherami
  7. */
  8. package org.javaresearch.core;
  9. import java.util. HashMap ;
  10. /**
  11. * 时间/次数双机制缓存管理器。
  12. * 如果只想使用其中的一种机制,将另外的一种机制的值设置为小于等于0的值即可。
  13. */
  14. public class ShortTimeCacheManager {
  15. private static HashMap caches = new HashMap ();
  16. private static ShortTimeCacheManager instance = new ShortTimeCacheManager();
  17. /**
  18. * 创建新的缓存项并且初始化缓存内容。
  19. * @param keepCount 缓存次数
  20. * @param keepSeconds 缓存秒数
  21. * @param cacheObject 缓存实例对象
  22. */
  23. public static void addCache( int keepCount, int keepSeconds,
  24. ShortTimeCachable cacheObject) {
  25. caches.put(cacheObject, instance.createNewCache(keepCount, keepSeconds));
  26. cacheObject.reset();
  27. }
  28. /**
  29. * 创建新的Cache内部类。
  30. * @param keepCount 缓存次数
  31. * @param keepSeconds 缓存秒数
  32. * @return
  33. */
  34. Cache createNewCache( int keepCount, int keepSeconds) {
  35. return new Cache(keepCount, keepSeconds);
  36. }
  37. /**
  38. * 使用一次缓存中的内容。
  39. * 如果缓存次数或者时间到了将刷新缓存内容。
  40. * 如果管理器中不存在对应的对象则不做任何事情。
  41. * @param cacheObject 缓存实例对象
  42. */
  43. public static void touch(ShortTimeCachable cacheObject) {
  44. Cache cache = (Cache) caches.get(cacheObject);
  45. if (cache != null ) {
  46. cache.cachedCount++;
  47. if (cache.needFresh()) {
  48. cacheObject.reset();
  49. cache.reset();
  50. }
  51. }
  52. }
  53. /**
  54. * 缓存信息内部类。
  55. */
  56. class Cache {
  57. int cachedCount; //已经缓存的次数
  58. long lastCacheTime; //上次缓存时间
  59. int cacheCount; //缓存次数
  60. long cacheTime; //缓存时间
  61. public Cache( int cacheCount, int cacheSeconds) {
  62. this .cacheCount = cacheCount;
  63. this .cacheTime = cacheSeconds * 1000;
  64. reset();
  65. }
  66. /**
  67. * 重置已经缓存的次数和上次缓存时间。
  68. */
  69. void reset() {
  70. cachedCount = 0;
  71. lastCacheTime = System .currentTimeMillis();
  72. }
  73. /**
  74. * 缓存是否需要刷新。
  75. * @return 如果缓存次数大于0并且已经缓存的次数大于等于缓存次数返回true,
  76. * 如果缓存时间大于0并且当前时间大于等于上次缓存的时间加上缓存时间则返回true,
  77. * 否则返回false。
  78. */
  79. boolean needFresh() {
  80. if (cacheCount > 0 && cachedCount >= cacheCount) {
  81. return true ;
  82. }
  83. if (cacheTime > 0
  84. && System .currentTimeMillis() >= lastCacheTime + cacheTime) {
  85. return true ;
  86. }
  87. return false ;
  88. }
  89. }
  90. }


</td> </tr> </table>


function TempSave(ElementID) { CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value); CommentsPersistDiv.save("CommentXMLStore"); } function Restore(ElementID) { CommentsPersistDiv.load("CommentXMLStore"); document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent"); } </td> </tr> <tr>


↑返回目录
前一篇: java枚举类型入门
后一篇: java垃圾收集

首页 | 全站 Sitemap | 联系我们 | 设为首页 | 收藏本站
版权所有 Copyright © 2006-2007, Java 编程资料牛鼻站, All rights reserved