**说明**:
* `Cache API`:缓存操作接口。
* `Cache Annotation`:缓存注解。
* `Cache`:缓存对象。
* `Store`:缓存数据存储,每个缓存对象实例最多可支持三级缓存数据存储。
* `Codec`:数据编解码(序列化与反序列化)。
* `Compressor`:数据压缩。
* `CacheLoader`:数据加载,用于从数据源读取数据。
* `CacheRefresh`:缓存数据刷新,定时通过 `CacheLoader` 加载并刷新缓存数据。
* `CacheSync`:缓存数据同步,用于维护各实例间私有缓存数据的一致性。
* `CacheMetrics`:缓存指标采集,用于记录缓存调用次数及命中率等指标。
* `MetricsSystem`:缓存指标信息的存储、计算与展示。
* `MQ`:消息队列,用于转发数据同步消息(已有实现采用 `Redis Stream`)。
* `DataSource`:数据源。
* `Redis` or `Other……`:缓存数据存储仓库。
## 3. 特性
- 支持多级缓存:一级缓存采用 `Caffeine`,二级缓存采用 `Redis`,最多可支持三级缓存。
- 缓存数据同步:通过缓存事件广播,多个应用实例的缓存数据保持一致。
- 缓存指标统计:支持调用次数、命中次数等指标,数据呈现可自由扩展。
- 缓存数据刷新:定时自动刷新缓存数据,避免慢查询导致应用响应缓慢。
- 随机存活时间:可选择自动生成随机存活时间,避免大量数据集中过期,导致数据源压力过大。
- 数据回源加锁:同一个键同一时刻仅允许一个线程回源查询,减轻数据源压力。
- 数据存在断言:可选择实现数据存在断言接口,譬如 `Bloom Filter`,减少无效回源查询。
- 支持缓存空值:可选择缓存空值,减少无效回源查询。
- 缓存数据压缩:可选择数据压缩,降低内存(磁盘)消耗。
- 支持缓存注解:`Cacheable`,`CacheableAll`,`CachePut`,`CachePutAll`,…… ,`CacheClear`
- 适配 `Spring Cache` 注解:如希望使用 `Spring Cache` 注解,可依赖 `Xcache` 适配项目,即可解锁更多功能。
## 4. 运行环境
`SpringBoot`:3.3.0+
`JDK`:21+
## 5. 开始使用
以下代码片段来自于 [xcache-samples](https://github.com/patricklaux/xcache-samples),如需获取更详细信息,您可以克隆示例项目到本地进行调试。
```bash
git clone https://github.com/patricklaux/xcache-samples.git
```
### 5.1. 第一步:引入缓存依赖
如直接通过调用方法操作缓存,不使用缓存注解,仅需引入 `xcache-spring-boot-starter` 。
主要依赖:`Caffeine`(内嵌缓存),`Lettuce`(`Redis` 客户端),`Jackson`(序列化)
```xml
* 用于数据回源操作,当缓存中不存在指定数据时,会调用此方法从数据源加载数据。
*
* @param userDao
*/
private record UserCacheLoader(UserDao userDao) implements CacheLoader