首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

兑现一个简单的hash型对象缓存管理池

2012-11-01 
实现一个简单的hash型对象缓存管理池实现的功能:1. 将对象按唯一的标识ID存入缓存池(池内部用hashMap 实现

实现一个简单的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 对象允许的最小访问次数,小于此值的对象将被列入被清理范围 次

1 楼 otom31 2009-12-18   其中暴露 get() put() 和 remove() 三个方法
不允许被迭代操作;
remove() 并不马上生效,而是被列入清除范围;
当一个对象被 remove 以后,如果还没有真正被删除,那么任然可以缓存命中! 2 楼 putonyuer 2009-12-23   请问, 并发是什么考虑的 3 楼 otom31 2009-12-27   暂未考虑并发,线程非安全的~~~

热点排行