本文共 2523 字,大约阅读时间需要 8 分钟。
一般缓存介绍
网上介绍缓存的文章比较多,在这里我就挑点重点说一下。
缓存是信息系统软件硬件设计中常用的设计方法:从底层硬件的CPU结构中的多级缓存,到软件中操作系统中内存管理的设计,再到应用软件中的高繁数据的缓存设计;在代码设计方面,小到一个冗余变量的设计,大到分布式缓存的设计;都可以见到缓存设计的身影。
缓存设计的目的是临时存储需要大量时间进行计算的结果,是一种空间换时间的思想。
缓存设计中的最重要的变化点是:更新策略(过期策略)。常见的更新策略有:实时检测、心跳检测、缓存依赖检测、绝对时间过期、滑动时间过期等。当然,在应用程序设计中,一个通用的缓存框架,缓存的具体位置也是一个常用的变化点,如:内存、文件、数据库、网络、云。在具体设计中,需要注意这两个变化点。
OEA缓存目标
以下列举了OEA缓存模块中目前需要支持的一些目标:
概要设计
整个缓存模块分为两大部分实现:通用缓存框架、OEA集成缓存框架。
通用缓存框架目标:
图1 通用缓存框架目标
通用缓存框架没有太多特点,预留两个变化点即可:存储位置、更新策略。此处可引入一些成熟缓存框架快速实现。
OEA集成缓存目标
图2 OEA中需要的Cache目标
OEA集成缓存框架是本次开发的重点,需要兼容原来的实体加载模式,并对实体类开发者透明,更重要的是,满足图中的这些场景。(不熟悉OEA的读者,看了上图可能会比较晕。:) )
通用缓存框架详细设计
由以上目标可知,Cache暂时支持两个扩展点:存储位置和更新策略。如下图:
图3 缓存框架的结构图
图中,用抽象的CacheProvider类来进行存储方式的扩展,用缓存配置类Policy中的ChangeChecker来实现显式的更新检测,并预留此为更新策略扩展点。由于ChangeChecker可能需要保存到数据库中,所以使用了Memoto模式来实现状态的存储。
我们先来看看目前的CacheProvider:
图4 通用缓存框架中内置的CacheProvider
内部实现了四个CacheProvider:
OEA集成Cache详细设计
不熟悉OEA的读者,可以直接跳过本节。
在OEA进行Cache集成时,比较复杂的是版本号更新策略的实现。具体内容如下图:
图5 基于数据范围的版本号的更新策略
给数据进行了范围的划分后,我们只需要对需要的范围内的数据进行进项检测就行了。数据范围越大,则数据过期的可能越大,但是检测的次数较少;范围越小,则可能因为检测的次数过多而造成网络访问次数过多,同样不利,所以对于这里面的使用,需要根据使用场景进行权衡。具体的类设计,接下来会给出。
整个集成的结构,如下图如示:
整个结构中,以EntityCache为中心,分为以下几个部分:
结尾
这样设计的缓存,目前在系统中已经使用了一段时间了,中间出现过几个小问题,不过总体情况还是比较满意的,性能提升较大。
另外,现在看来,在范围数据的过期设计这一块,较为复杂,不易理解,应该在以后的设计中进行优化。
本文转自BloodyAngel博客园博客,原文链接:http://www.cnblogs.com/zgynhqf/archive/2010/11/29/1891105.html,如需转载请自行联系原作者