CS Cache 架构

    1. 支持按不同的ContextID进行拆分:需要完成ContextID间元数据隔离

    2. 支持LRU:按照特定算法进行回收

    3. 支持按关键字进行检索:支持通过关键字进行索引

    4. 支持索引:支持直接通过ContextKey进行索引

    5. 支持遍历:需要支持通过按照ContextID、ContextType进行遍历

    6. 需要与与Persistence模块进行对接完成ContextID内容的加载与解析

    7. 当JVM内存不够时能够基于内存使用和使用频率的清理

    8. 支持统计每个ContextID的内存使用情况

    9. 支持统计每个ContextID的使用频率

    ContextCache的架构如下图展示:

    1. ContextService:完成对外接口的提供,包括增删改查;

    2. Cache:完成对上下文信息的存储,通过ContextKey和ContextValue进行映射存储

    3. Parser:完成对上下文信息的关键字解析;

    4. LoadModule当ContextCache没有对应的ContextID信息时从持久层完成信息的加载;

    5. AutoClear:当Jvm内存不足时完成对ContextCache进行按需清理;

    6. Listener:用于监听ContextCache的Metric信息,如:内存占用、访问次数。

    ContextCache的存储结构划分为了三层结构:

    ContextCach:存储了ContextID和ContextIDValue的映射关系,并能够完成ContextID按照LRU算法进行回收;

    ContextIDValue:拥有存储了ContextID的所有上下文信息和索引的CSKeyValueContext。并统计ContextID的内存和使用记录。

    CSInvertedIndexSet:通过CSType进行分类存储关键词索引

    CSKeyValueMapSet:通过CSType进行分类存储上下文信息

    CS Cache 架构 - 图3

    下面的图绘制了以ContextID、KeyWord、ContextType去ContextCache中查对应的ContextKeyValue的整体流程。

    说明:其中ContextIDValueGenerator会去持久层拉取ContextID的Array[ContextKeyValue],并通过ContextKeyValueParser解析ContextKeyValue的关键字存储索引和内容。

    ContextCacheService提供的其他接口流程类似,这里不再赘述。

    ContextValue具体的实体Bean需要在对应可以作为keyword的get方法上面使用注解\@keywordMethod,比如Table的getTableName方法必须加上\@keywordMethod注解。

    CS Cache 架构 - 图5

    ContextKeyValueParser在解析ContextKeyValue的时候,会去扫描传入的具体对象的所有被KeywordMethod修饰的注解并调用该get方法获得返回对象toString并会通过用户可选的规则进行解析,存入keyword集合里面。规则有分隔符,和正则表达式

    注意事项:

    1. 该注解会定义到cs的core模块