Cache作为提高性能的有效手段可以说是无处不在的。CPU有一级缓存,二级缓存;数据库有自己的数据缓存;内存实质上就是硬盘的缓存。。。。。。而程序中的缓存也能够有效的减少与存储设备的交互,增加应用的并发能力。
我通过在实际项目中自行设计和使用cache,逐渐提高了系统的并发能力,但同时也感觉到了很多的不足:
1. 因为是在原有系统基础上优化,cache的处理没有统一的规划,而是头痛医头,脚痛医脚。cache分散在系统各个模块,很难想起哪些模块使用了cache
2. cache的实现各种各样,有的是单例、有的是static对象,而cache对象与数据库的交互也是直接硬编码在原有系统中,难于维护
3. cache的参数如刷新间隔。。。。。。未使用配置文件,而是直接定义在cache的类文件中,对配置的更改就需要更新整个类,进而影响系统的运行
4. 缺少对cache的监控机制和log机制,出现问题很难去跟踪和解决。
经过一段时间具体项目的洗礼,对java也有了进一步的认识,我也可以有能力来解决一直困扰心中的cache的这些问题了。想法很简单,就是能够通过单一的配置文件,对系统中的所有cache进行统一的管理,各个cache所在的模块,和cache的配置参数,都能够一目了然。而对配置文件的重载功能也是我要考虑的问题,希望对某些cache的配置的更改能够对其它cache无影响,同时这些更改也能在不影响应用运行状态的情况下进行。当然既然是统一管理,就需要做到接口的统一。我定义了Cache和CachePersistence两个接口,然后不同的cache可以提供不同的实现,实现类需要在配置文件中指定,同时系统提供默认的实现,以满足简单的应用。想了就要开始做,我也没想一开始就做出象OSCache或JbossCache那样通用的cache来,也许经过不断的交流,不断的完善最终可以做到。经过简单的设计,我就开始写代码了,就我一个人,也算是XP编程了,呵呵!cache的配置参数,我根据项目经验想到了几个,可能还可以有,但目前我不知道,需要在更多的项目应用中去发现,具体可以看我的包中的cache.xml文件,有对配置项的具体说明。
从开始开发到最后写完测试类,也就不到一个星期的时间(上班的空余时间和加班写),当中也进行了几次重构。总的来说,还算满意,这也算俺的第一个开源项目啊,呵呵!
具体如何使用,很简单,你有兴趣可以实现Cache接口,我内置了基于HashMap的Cache,应该能满足大部分应用的需要。CachePersistence就是你的对象与存储设备交互的实现了,你一般需要实现这一接口,然后配置在配置文件中。然后通过CacheFactory得到Cache,通过Cache接口使用对象。对Cache的操作你可以当成一个Map来使用,由容器来自动处理何时与存储设备的交互,你只要配置好就ok了。另外可以参考src中的test包,里面是我对Cache的功能测试代码,也能作为使用cache的实例的。
说了这么多,大家如果有兴趣,可下载我的全部文件,里面包括jar、src、lib、javadoc还有配置文件,点击这里http://www.blogjava.net/Files/pesome/pcache.zip。更欢迎大家在实际的项目中使用我的cache,如果有任何问题都可以跟我联系,mailto:pesome@163.com。谢谢!