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。谢谢!<!----><o:p></o:p>
分享到:
相关推荐
一个cache小组件.jar
PrimoCache 是一款高效且实用的硬盘缓存软件,旨在提升系统性能,通过利用内存作为硬盘的高速缓存,减少磁盘读写时间,从而加快数据访问速度。3.0.2 版本的 PrimoCache 更是在前作基础上进行了优化,提供了更加稳定...
- **基于消息传递的协议**:当一个Cache进行写操作时,它会向其他所有包含该数据块的Cache发送更新消息,这些Cache接收到消息后会更新自己的副本。 #### 五、总结 综上所述,Cache一致性问题是计算机系统设计中...
全相联Cache( Fully-Associative Cache)是Cache组织方式的一种,与直接映射Cache和组相联Cache不同,它的每一个块都可以映射到Cache的任何一个位置上,这提供了更大的灵活性,但也带来了更高的复杂性。 全相联...
自冲突是指同一块内的多个数据因映射至相同的Cache地址而引发的冲突,这可能导致部分数据提前被替换,降低Cache利用率。在大规模矩阵操作中,不同元素间的地址距离可能恰好为Cache容量的整数倍,从而触发自冲突。为...
根据提供的文件信息,我们可以推断...通过上述步骤和组件的选择,可以实现一个功能完整的4路组相连Cache系统。这种设计不仅提高了Cache的命中率,还降低了硬件复杂度,是现代计算机体系结构中常用的Cache组织方式之一。
相比于全相联Cache(所有块都可以映射到任意一个组)和直接映射Cache(每个块只能映射到一个特定组),2路组相联方案提供了一种折中的方案,它比直接映射Cache有更高的命中率,但结构上比全相联Cache简单,成本更低...
Cache 性能分析是计算机体系结构中一个非常重要的主题,它直接影响着计算机的整体性能。通过设置不同的变量,来观察对 Cache 命中率的影响,可以更好地理解 Cache 的基本概念、基本组织结构以及基本工作原理,并...
当CPU发起一个读或写请求时,Tag Memory会检查请求的地址是否匹配已存储的Tag,如果匹配则称为命中,否则为未命中。 2. **Data Memory**:保存缓存中的实际数据。每个缓存块(Line)包含多个数据字(Word),通常与...
ARM920T 处理器的 Cache 是一个高速缓冲存储器,负责存储频繁访问的数据。ARM920T 的 Cache 采用三级缓存机制,每级缓存的大小为 4KB、16KB 和 64KB。 MMU 和 Cache 之间的关系 MMU 和 Cache 之间存在紧密的关系。...
Zend Framework是一个流行的PHP全栈开发框架,其中包含了一系列组件,包括Zend Cache,用于提供缓存服务。 **详细知识点:** 1. **缓存原理**:缓存的基本思想是保存和重用之前计算或获取的数据,避免重复昂贵的...
- **写分配(Write Allocate)**: 当Cache缺失时,即使只写入也要分配一个新的Cache行。 不同的写策略对性能和功耗的影响各不相同,需要根据具体的应用场景来选择合适的策略。 综上所述,Cache-Memory是现代处理器...
2. **替换策略**:当Cache满时,需要选择一个数据块替换出去,常见的替换策略有随机替换(LRU)、最近最久未使用(LRU)、先进先出(FIFO)等。 3. **缓存行(Cache Block)**:Cache将数据按固定大小的块进行存储...
例如,一个简单的直接映射缓存可能包括地址解码、数据存储阵列、标记存储阵列和状态位等组件,这些都可以通过Verilog模块来实现。 VHDL(Very High Speed Integrated Circuit Hardware Description Language)同样...
Doctrine Cache是一个轻量级且易于使用的组件,它为PHP开发人员提供了丰富的API,用于管理和操作各种类型的缓存。通过这个库,开发者可以快速实现对数据的缓存,并且能够灵活地选择不同的存储引擎,以适应项目需求...
- **Invalidate操作:** 为了确保Cache的一致性,当一个Cache中的数据被修改后,需要通知其他Cache使其对应的Cache行失效(Invalidate),这样其他Cache在下次访问该数据时会重新从更高级别的Cache或主存储器中加载...
SuperCache实现专利的数据块级别的缓存技术,除提高系统性能之外,还能独自进行 NT 文件级别缓存。... SuperCache 5 的核心组件是存储卷过滤驱动程序,它驻留在存储卷类驱动程序上面的存储堆栈中。
PrimoCache通过在内存中创建一个高速缓存层,将频繁访问的数据暂存其中,从而减少对硬盘的直接读写操作。这就好比在硬盘和应用程序之间设置了一个高速通道,使得数据传输更为迅速。尤其是对于机械硬盘而言,由于其...