简介:工具包封装了批量查询缓存的功能,缓存中不存在的数据,会去DB中查询,然后聚合数据。使用了构造器模式和函数式编程,提供了链式调用的使用方式。
展示流程图使用了Mermaid工具
graph LR
start[开始] --> input[keys]
input --> onCache{缓存开关是否打开}
onCache -- YES --> fromCache[批量查询缓存]
onCache -- NO --> fromDB{查询DB}
fromCache -- GET --> isAllCached{缓存数据是否存在}
isAllCached -- YES --> toCacheList[获取缓存数据]
isAllCached -- NO --> noCachedData[未缓存数据]
noCachedData -- TO --> fromDB[查询DB]
fromDB -- GET --> DBData[DB数据]
DBData -- Cache --> CacheData[缓存数据]
DBData -- TO --> Concat[融合数据]
toCacheList[获取缓存数据] -- TO --> Concat[融合数据]
Concat[融合数据] --> toData[输出数据]
toData[输出数据] --> stop[结束]
- Java 17
- Java 11
- Java 8
<dependency>
<groupId>io.github.leavestyle-coder</groupId>
<artifactId>java-cache-utils</artifactId>
<version>1.0.1</version>
</dependency>
implementation(group = "io.github.leavestyle-coder", name = "java-cache-utils", version = "1.0.1")
implementation group: 'io.github.leavestyle-coder', name: 'java-cache-utils', version: '1.0.1'
代码中封装了不同的xxHandler用于处理不同的缓存情况
缓存中的值是一个【数据数组】转成的字符串,即处理一个key可能存在1到n个数据的情况。
// 例如测试用例中的缓存值
[
{
"userId": "1",
"userName": "name1",
"userAddress": "address1"
}
]
缓存中的值是一个【数据对象】转成的字符串,即处理一个key最多存在1个数据的情况。
// 例如测试用例中的缓存值
{
"userId": "1",
"userName": "name1",
"userAddress": "address1"
}
参考代码中的测试用例。
reXX
re表示必须赋值的字段,如果是null,build时会报错。initXX
init表示使用缓存必须赋值的字段,默认是null,不配置会执行DB。opXX
op表示可选字段,有默认值。