自己写的一个cache小组件

Cache作为提高性能的有效手段可以说是无处不在的。CPU有一级缓存,二级缓存;数据库有自己的数据缓存;内存实质上就是硬盘的缓存。。。。。。而程序中的缓存也能够有效的减少与存储设备的交互,增加应用的并发能力。

我通过在实际项目中自行设计和使用cache,逐渐提高了系统的并发能力,但同时也感觉到了很多的不足:

1.       因为是在原有系统基础上优化,cache的处理没有统一的规划,而是头痛医头,脚痛医脚。cache分散在系统各个模块,很难想起哪些模块使用了cache

2.       cache的实现各种各样,有的是单例、有的是static对象,而cache对象与数据库的交互也是直接硬编码在原有系统中,难于维护

3.       cache的参数如刷新间隔。。。。。。未使用配置文件,而是直接定义在cache的类文件中,对配置的更改就需要更新整个类,进而影响系统的运行

4.       缺少对cache的监控机制和log机制,出现问题很难去跟踪和解决。

经过一段时间具体项目的洗礼,对java也有了进一步的认识,我也可以有能力来解决一直困扰心中的cache的这些问题了。想法很简单,就是能够通过单一的配置文件,对系统中的所有cache进行统一的管理,各个cache所在的模块,和cache的配置参数,都能够一目了然。而对配置文件的重载功能也是我要考虑的问题,希望对某些cache的配置的更改能够对其它cache无影响,同时这些更改也能在不影响应用运行状态的情况下进行。当然既然是统一管理,就需要做到接口的统一。我定义了CacheCachePersistence两个接口,然后不同的cache可以提供不同的实现,实现类需要在配置文件中指定,同时系统提供默认的实现,以满足简单的应用。想了就要开始做,我也没想一开始就做出象OSCacheJbossCache那样通用的cache来,也许经过不断的交流,不断的完善最终可以做到。经过简单的设计,我就开始写代码了,就我一个人,也算是XP编程了,呵呵!cache的配置参数,我根据项目经验想到了几个,可能还可以有,但目前我不知道,需要在更多的项目应用中去发现,具体可以看我的包中的cache.xml文件,有对配置项的具体说明。

从开始开发到最后写完测试类,也就不到一个星期的时间(上班的空余时间和加班写),当中也进行了几次重构。总的来说,还算满意,这也算俺的第一个开源项目啊,呵呵!

具体如何使用,很简单,你有兴趣可以实现Cache接口,我内置了基于HashMapCache,应该能满足大部分应用的需要。CachePersistence就是你的对象与存储设备交互的实现了,你一般需要实现这一接口,然后配置在配置文件中。然后通过CacheFactory得到Cache,通过Cache接口使用对象。对Cache的操作你可以当成一个Map来使用,由容器来自动处理何时与存储设备的交互,你只要配置好就ok了。另外可以参考src中的test包,里面是我对Cache的功能测试代码,也能作为使用cache的实例的。

说了这么多,大家如果有兴趣,可下载我的全部文件,里面包括jarsrclibjavadoc还有配置文件,点击这里http://www.blogjava.net/Files/pesome/pcache.zip。更欢迎大家在实际的项目中使用我的cache,如果有任何问题都可以跟我联系,mailto:pesome@163.com。谢谢!

posted on 2005-09-06 15:38 pesome 阅读(2200) 评论(6)  编辑  收藏 所属分类: 开源软件

评论

# re: 自己写的一个cache小组件 2005-09-06 17:48 margiex

Resource not found  回复  更多评论   

# re: 自己写的一个cache小组件 2005-09-07 09:19 pesome

链接开始有点错误,我已经更改!谢谢!  回复  更多评论   

# re: 自己写的一个cache小组件 2005-09-08 11:13 Xuefeng

好像你的算法是整个Cache Pool都全部刷新,最好根据LRU算法

另外Week引用好像可以适用于Cache  回复  更多评论   

# re: 自己写的一个cache小组件 2005-09-08 12:27 pesome

呵呵,如果配置文件更改,我会刷新相应的cache。你所说的LRU算法应该是cache有大小限制,在已满状态下增加新的对象的替换算法,这个我还没实现,呵呵!目前没有大小限制。“Week引用好像可以适用于Cache ”,有点不明白,能说的更详细些吗?谢谢  回复  更多评论   

# re: 自己写的一个cache小组件 2005-09-12 15:26 Xuefeng

cache的实现是很复杂的,如果不考虑大小限制肯定会内存溢出,定期刷新的cache还好一点,要实现读写同步的通用cache基本上特别困难,现在比较好的cache框架就是oscache  回复  更多评论   

# re: 自己写的一个cache小组件 2009-12-28 16:29 ll

顶  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2005年9月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

导航

统计

公告

主要记录作者在学习java中的每一步足迹。除非特别说明,所有文章均为本blog作者原创,如需转载请注明出处和原作者,如用于商业目的,需跟作者本人联系。
欢迎大家访问:

常用链接

留言簿(16)

随笔分类

随笔档案

文章分类

文章档案

相册

收藏夹

java技术

人间百态

朋友们的blog

搜索

最新评论

阅读排行榜

评论排行榜