`
yjl49
  • 浏览: 112951 次
社区版块
存档分类
最新评论

Openfire 的 Cache机制

    博客分类:
  • JAVA
阅读更多

Openfire 中多处用到了Cache 来存储那些访问较为频繁的数据,例如userManager中的userCache,rosterManager 中的rosterCache。

以下为Openfire中Cache的实现机制:

1. Cache 接口:

 

提供了基本的Cache接口方法。

2. Cacheable 接口:

 


继承了序列化接口,如果是自己定义的数据需要存储在Cache中,则需要实现此接口中的getCacheSize()方法,否则会在Cache.put 时报如下的错误:

 

 


3.CacheSizes:

 

一个提供计算对象大小的类。比较好用的是sizeOfMap()、sizeOfCollection()、sizeOfString() 方法,可在实现getCacheSize() 方法时直接调用。

4.DefaultCache:

Openfire中Cache接口的一个实现,其中保持了两个链表lastAccessedList (用于被访问的顺序管理),ageList (用于生命周期的管理)。

主要提供了以下方法:

 

 

4.CacheFactoryStrategy 接口和 DefaultLocalCacheStrategy类:

CacheFactoryStrategy 接口主要定义了在集群模式下的Cache 管理方法。

DefaultLocalCacheStrategy 则为Openfire中使用的Cache 管理方法,并没有实现集群功能。

最主要的方法可以看下createCache()。

5.CacheFactory 工厂类:

这里用到了java 设计模式中的工厂模式

在Openfire 甚至我们自己写的插件中会用到各种各样的Cache,CacheFactory则提供了一个统一的创建和使用Cache的平台。

这里重点看三个成员:

 

第一个用来存储所有创建的Cache

 

第二个用来存储所有创建的Cache名称

第三个用来存储Cache的属性

整个Factory 中的大部分方法都是围绕这三个成员进行操作的。集群部分由于在strategy中未实现,暂不讨论。

createCache方法直接调用strategy 的createCache() 来创建Cache。

6.Cache的使用:

如果我们需要在使用Cache来实现某些数据的缓存,则可以使用Openfire的Cache机制,在CacheFactory的 static{} 代码块中添加我们自己的 Cache。在需要的地方使用createCache(),需要注意的是对Cache的操作需要考虑线程的同步和互斥。

PS: 在java 编程中使用此Cache 机制也是很不错的选择,对代码稍加修改就可到处使用。大笑

 

分享到:
评论

相关推荐

    openfire使用hazelCast集群

    HazelCast 集群配置信息中,需要配置 group name、password、network port、join 机制等信息。例如: multicast-group="224.2.2.3" multicast-port="54327"/> <hz:members>10.10.1.2, 10.10.1.3 ...

    关于Openfire集群源码的分析

    2. 缓存设计:Openfire提供了一个缓存接口`Cache, V>`,它是对数据容器的包装,提供了基本的缓存操作方法。在非集群模式下,默认的缓存实现是`DefaultCache`,它基于HashMap。为了实现缓存的扩展性,Openfire有一个`...

    基于Smack4.1.x需要的额外第三方jar包

    而JXMPP Util Cache则提供了缓存机制,帮助优化性能,比如存储已解析的JID(Jabber ID),避免重复解析,提高整体系统的响应速度。 在使用这些额外的jar包时,开发者需要确保它们与Smack4.1.x版本兼容,并正确地将...

    java开源包1

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包11

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包2

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包3

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包6

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包5

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包10

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包4

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包8

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包7

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包9

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包101

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    Java资源包01

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

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

    简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!...

Global site tag (gtag.js) - Google Analytics