`
otom31
  • 浏览: 226204 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

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

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

相关推荐

    java开源包3

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包4

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

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

    简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 ...

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

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码...

    java开源包1

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包11

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包2

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包6

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包5

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包10

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包8

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包7

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包9

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包101

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    Java资源包01

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    网站架构技术

    将密钥和算法放在一个独立的服务器上,对外提供加密和解密服务 密钥放在独立服务器中,算法放在应用程序中。 信息过滤与反垃圾 文本匹配_敏感词过滤 正则表达式 trie树 双数组trie树 多级Hash...

    java面试宝典

    72、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 18 73、线程的基本概念、线程的基本状态以及状态之间的关系 18 74、sleep() 和 wait() 有什么区别? 18 75、socket通信...

    千方百计笔试题大全

    72、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 18 73、线程的基本概念、线程的基本状态以及状态之间的关系 18 74、sleep() 和 wait() 有什么区别? 18 75、socket...

    Oracle9i的init.ora参数中文说明

    说明: 指定一个字符串值, 设置 TIME 数据类型的默认值, 该数据类型包含 HOUR, MINUTE 和 SECOND 这几个日期时间字段。 语法: TIME '09:26:50' (将值存储为 7 个字节)。 默认值: 从 NLS_TERRITORY 中获得 nls_time...

Global site tag (gtag.js) - Google Analytics