Xcache:多级缓存框架介绍
多年前,我造过一个轮子,也是多级缓存框架,名字也叫做 Xcache。 多年后,本着重复造轮子的精神,我又造了个新轮子:https://github.com/patricklaux/xcache 因为是新造的轮子,所以看起来似乎更圆了一些,跑起来似乎也更顺滑了一些。 非要自夸一下的话,那就是这么些年的编程生涯,在踩过许多坑之后,编码质量更好了点,架构设计更合理了些。 1. 整体架构 说明: Cache API:缓存接口。 Cache Annotation:缓存注解。 Cache:缓存对象。 Store:缓存数据存储,每个缓存对象实例最多可支持三级缓存数据存储。 Codec:数据编解码(序列化与反序列化)。 Compressor:数据压缩。 CacheLoader:数据加载,用于从数据源读取数据。 CacheRefresh:缓存数据刷新,定时通过 CacheLoader 加载并刷新缓存数据。 CacheSync:缓存数据同步,用于维护各实例间私有缓存数据的一致性。 CacheMetrics:缓存指标采集,用于记录缓存调用次数及命中率等指标。 MetricsSystem:缓存指标信息的存储、计算与展示。 MQ:消息队列,用于转发数据同步消息(已有实现采用 Redis Stream)。 DataSource:数据源。 Redis or Other……:缓存数据存储仓库。 2. 框架特性 支持多级缓存:一级缓存采用 Caffeine,二级缓存采用 Redis,最多可支持三级缓存。 缓存数据同步:通过缓存事件广播,多个应用实例的缓存数据保持一致。 缓存指标统计:支持调用次数、命中次数等指标,数据呈现可自由扩展。 缓存数据刷新:定时自动刷新缓存数据,避免慢查询导致应用响应缓慢。 随机存活时间:可选择使用随机存活时间,避免大量数据集中过期,导致数据源压力过大。 数据回源加锁:同一个键同一时刻仅允许一个线程回源查询,减轻数据源压力。 数据存在断言:可选择实现数据存在断言接口,譬如 Bloom Filter,减少无效回源查询。 支持缓存空值:可选择缓存空值,减少无效回源查询。 缓存数据压缩:可选择数据压缩,降低内存(磁盘)消耗。 支持缓存注解:Cacheable,CacheableAll,CachePut,CachePutAll,…… ,CacheClear 适配 Spring Cache 注解:如希望使用 Spring Cache 注解,可依赖 Xcache 适配项目,即可解锁更多功能。 3. 缓存流程 原则:数据查询顺序从一级缓存到三级缓存,数据写入、删除顺序从三级缓存到一级缓存。 实际应用中,可能只有一级缓存或两级缓存,并不一定有全部三级缓存,这是可配置的。 3.1. 数据查询 流程:按照一级缓存 → 二级缓存 → 三级缓存的顺序依次查询。 图示: 3.2. 数据写入 流程:按照三级缓存 → 二级缓存 → 一级缓存的顺序依次写入。 图示: 3.3. 数据删除 流程:按照三级缓存 → 二级缓存 → 一级缓存的顺序依次删除。 ...