`
otom31
  • 浏览: 229297 次
  • 性别: 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连接redis/jedis连接池/jedis相关工具/jedis对象存取

    以下是一个简单的Jedis连接池配置示例: ```java import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class JedisPoolExample { private static final String REDIS_...

    java开源包3

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

    Ruby-OhmRedis的Objecthash映射库

    Ruby是一种动态、面向对象的编程语言,而Ohm是针对Ruby设计的一个ORM(对象关系映射)/ODM(对象数据映射)框架,专门用于与Redis这种内存数据存储进行交互。Ohm允许开发者以简洁的Ruby代码操作Redis的数据结构,...

    java开源包4

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

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

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

    java开源包11

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

    java开源包1

    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...

    数据库管理系统MySql(JSP版).rar_jsp mysql 系统_jsp管理系统_mysql jsp

    MySQL是一个广泛使用的开源关系型数据库管理系统(RDBMS),它以其高效、稳定和易于管理的特点在Web开发领域中占据了重要地位。JSP(JavaServer Pages)是Java平台上的动态网页技术,它允许开发者将Java代码嵌入到...

    Memcached源码剖析笔记.pdf

    《Memcached源码剖析笔记》是一份深入解析Memcached内部工作原理和技术细节的文档,旨在帮助读者理解这个高性能分布式内存对象缓存系统的设计与实现。Memcached被广泛应用于动态Web应用程序,通过缓存数据和对象,...

    java面试宝典

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

Global site tag (gtag.js) - Google Analytics