实现一个简单的hash型对象缓存管理池
实现的功能:
1. 将对象按唯一的标识ID存入缓存池(池内部用hashMap 实现);
2. 通过唯一标示ID高速读取池中的对象,如果对象已经失效,返回空;
3. 自动计算对象的存取时间,使用频率,使用次数,缓存命中次数和访问次数;
4. 对于使用频率低,使用次数少,空闲时间长的对象,自动从缓存池中删除;
5. 参数可配置,监视器自己实现,不依赖其他包,功能简单;
把源码包发上来,抛砖引玉哈,希望大家多多批评!
下面的代码是初始化和使用方法!
ObjectCachePool<String, Object> dataCache = new ObjectCachePool<String, Object>( CacheConfig.getIntProperty("cache", "maxSize"), CacheConfig.getIntProperty("cache", "minSize") ); //是否自动清理 dataCache.setAutoClean(CommonUtils.parseBoolean(CacheConfig.getGameProperty("cache", "isAutoClean"),true)); //状态报告间隔 dataCache.setStateTimes(CacheConfig.getIntProperty("cache", "stateTimes")); //清理工作临界值 dataCache.setCriticalSize(CacheConfig.getIntProperty("cache", "criticalSize")); //最大清除数量 dataCache.setMaxCleanSize(CacheConfig.getIntProperty("cache", "maxCleanSize")); //最大允许空闲时间 大于此值,将被列入清除范围 dataCache.setMaxFreeTime(CacheConfig.getIntProperty("cache", "maxFreeTime")); //最小允许访问率 小于此值,将被列入清除范围 dataCache.setMinAccFrq(CacheConfig.getDoubleProperty("cache", "minAccFrq")); //最小允许访问次数 小于此值,将被列入清除范围 dataCache.setMinAccNum(CacheConfig.getIntProperty("cache", "minAccNum")); //设置缓存监视器 dataCache.setMonitor(new CacheMonitor()); dataCache.startMonitor();
一些参数的意义如下:
stateTimes 状态信息输出间隔时间
isAutoClean 是否自动清理
maxSize 最大允许容量
minSize 最小容量
criticalSize 清理临界点,缓存达到此值后清理工作开始执行
maxCleanSize 每次清理数量 每次清理工作从缓存中清除出局的数量达到此值后清理工作停止
maxFreeTime 最大空闲时间,大于此空闲时间的对象将被列入被清理的范围 秒
minAccFrq 对象的最小访问平率,小于此值的对象将被列入被清理的范围 次/小时
minAccNum 对象允许的最小访问次数,小于此值的对象将被列入被清理范围 次
-
本文附件下载:
- ObjectCachePool-0.1.jar (14.4 KB)
作者: otom31
声明: 本文系JavaEye网站发布的原创文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!
已有 1 人发表回复,猛击->>这里<<-参与讨论
JavaEye推荐
- 上海:月薪1-2万诚聘资深PHP开发人员
- 上海:天会皓闻诚聘CTO技术总监
- 成都:月薪5千到1万招聘Java开发工程师
- 上海:天会皓闻诚聘资深Java架构师
- 上海:高薪诚聘Python开发人员
- 北京:手机之家网站诚聘PHP程序员
- 北京:高薪招聘Java搜索开发工程师
作者:Fervour
出处:http://fervour.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://fervour.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。