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的属性
整个Factory 中的大部分方法都是围绕这三个成员进行操作的。集群部分由于在strategy中未实现,暂不讨论。
createCache方法直接调用strategy 的createCache() 来创建Cache。
6.Cache的使用:
如果我们需要在使用Cache来实现某些数据的缓存,则可以使用Openfire的Cache机制,在CacheFactory的 static{} 代码块中添加我们自己的 Cache。在需要的地方使用createCache(),需要注意的是对Cache的操作需要考虑线程的同步和互斥。
PS: 在java 编程中使用此Cache 机制也是很不错的选择,对代码稍加修改就可到处使用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述