文档介绍:Cache 框架,顾名思义即数据的暂存场所和管理。那么该系统的两个核心功能就开始上演了,即存放数据的一个容器和管理缓存容器。就像数据库服务器软件一样,他有一个和新的数据存放场所,同时还有一个管理数据的管理系统。在这个管理系统中就出现了一系列的事务处理,比如说添加,删除,更新以及刷新,删除不成功时如何操作等等。那么该缓存框架需要完成的基本任务就是如何来实例化这么一个数据存储的仓库以及如何有效的来管理仓库中的这些数据,除了上述的这些操作外,还有当仓库中的数据当容量值是再次放入一个缓存实体时该如何有效的淘汰已存在的缓存实体以及该缓存仓库中的数据是否持久有效还是分区管理等等。那么又该如何实例化这么一个缓存仓库呢?首先要考虑的第一问题就是采用何种数据结构来高效的存储这些数据?
如何来管理缓存中的对象?----OScache中是通过AbstractConcurrentReadCache和Cache强强联手来管理的
如何来管理内存容量的问题?
给缓存中添加一个新的缓存实体时,需要注意哪些问题?
当向缓存中添加一个实体时,应该完成哪些必要的业务逻辑呢?我们可以把缓存看做是一个组件,添加一个新的实体是促发该组件的一个事件,该组件能够对该事件进行捕捉并能够进行相应的处理。
如何有效的来淘汰缓冲池中对象?
如何来管理缓存实体的刷新问题?
实体的更新状态信息具体分应该分为以下几种:分别是还没更新、处于更新状态中、更新完成、更新取消。其中用一个变量来保存当前的更新状态,也即跟踪每一个缓存缓存对象当前处于一种什么状态。同时用什么来表明一个缓存实体过期的标识呢?这里有两种方案:其一就是线程拥有的数量,当线程拥有的数量变为0时,就从缓存容器中释放。其二就是设置一个TTL 发呆的最大时间。就像是Seesion来管理他内部存储的对象一样。如果再多长时间内没有访问,则及时清除缓存中的一部分对象。这里应该分两种情况来管理缓存中的实例。不然就是去了缓存的真实作用。如果实时性比较高的数据,比如说股票等,那就给这些缓存实体设置一个TTL时间,如果不是实时性数据,那么就将该值设置为-1,比如用户信息这一类的数据。那么如何来判断该缓存实体是否需要刷新呢(OsCache中的CacheEntry的
needsRefresh方法)?
当该缓存实体从来都没有更新时,则更新;
如果该实体之前已经刷新过了,则需要刷新
如果传入的参数为0,那么说明该缓存须立即刷新,则刷新;
如果实体刷新策略对象()不为空
当缓存实体的生命周期时间到期了(用设置的刷新期加上最后一次访问的时间距现在的时长为标准,如果小于当前的时长,则说明已经过期了,则需要刷新,否则不需要),
如何检测缓存中的数据和数据库中的数据同步与不同步的问题?
如何实现磁盘缓存?
磁盘缓存该在什么时候实现呢?这里有两种方案:
当基于内存缓存时容器满时,被淘汰的缓存实体该如何来处理,是直接被jvm的垃圾回收机制回收还是将他们暂持久化到本地?如果是暂时的持久化到本地,那么这些实体又该什么时候置换进内存呢?当内存中未命中时此时应该到外存去查找是否存在。因此系统也应该保留一个缓存文件的集合,因此到时就可以直接在这集合中判断外存是否具有该实体的本地持久化,若有则表示外存命中,则此时应该根据具体的替换算法将内存缓存的实体进行置对换出。从而