• Openfire 的 Cache机制


    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 机制也是很不错的选择,对代码稍加修改就可到处使用。大笑

  • 相关阅读:
    H264关于RTP协议的实现
    RTSP交互命令简介及过程参数描述
    RTSP协议详解
    TCP 协议中MSS的理解
    RTSP 协议分析
    Linux下/etc/resolv.conf 配置DNS客户
    371. Sum of Two Integers
    python StringIO
    高效的两段式循环缓冲区──BipBuffer
    JavaScript Lib Interface (JavaScript系统定义的接口一览表)
  • 原文地址:https://www.cnblogs.com/yjl49/p/2371954.html
Copyright © 2020-2023  润新知