FileCache
# FileCache说明
说明
由于ChopperBot中使用了大量的Json文件来保存配置或数据 而有些Json文件可能会被频繁的操作,而FileCache就是用来解决文件的频繁写入造成的IO问题,FileCache具备了简单的文件操作功能,文件缓存池,文件刷入,文件定时刷入,文件版本对照功能, 方便开发人员对文件的操作与管理。
- 文件缓冲池:写入内容快速写入缓存,无需等待IO
- 多种文件sync机制:达到缓冲池上限触发sync,定时监控进行sync
- 快速的文件操作:快速的查看,修改文件内容
- 文件版本对照机制:比对新老文件版本,减少无意义的刷入
# 使用
# 进行文件缓存
- 先创建一个类继承ConfigFile类
- 创建一个FileCache类并将ConfigFile放入Cache中即可
ModuleSrcConfigFile chopperBotConfigFile = new ModuleSrcConfigFile();
FileCache fileCache = new FileCache(chopperBotConfigFile);
1
2
2
构造方法参数 | 说明 |
---|---|
configFile | 要缓存的配置文件 |
autoSyncTime | 定时刷入文件时间,如果为0则不进行定时刷入 |
maxWriteBufferLimit | 当写入的内容大小超过该值时会进行一次文件刷入 |
# 文件缓存操作
方法名称 | 描述 |
---|---|
get | 获取文件缓存内容 |
writeKeys | 写入文件缓存内容 |
append | 追加文件缓存内容 |
{
"updateTime": "2023-05-06 04:05:20",
"data": {
"account": {
"src": "./config/account",
"list": [1,2,3,4,5]
}
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# get(String...keys)
# 方法说明
- keys代表嵌套查询,例如上述json文件想获取data下的src只需使用方法
get("account","src")
,注意无需再获取"data",方法中已经包含data的自动获取, - 如果想获取数组的元素,只需使用方法
get("account","list","0")
选择下标即可,之后的keys同理
fileCache.get("account","src");
fileCache.get("account","list","2");
1
2
2
# writeKeys(Object data,String...keys)
# 方法说明
- data: 写入文件的内容,写入的内容大小会被FileCache计入
- keys: 和get的参数keys一致,只不过要进行数组写入的话,比如追加数组内容,则采用
writeKeys("account","list",-1)
fileCache.writeKeys(data,"account","src"); //更改文件内容
fileCache.writeKeys(data,"account","list","0"); //更改数组内容
fileCache.writeKeys(data,"account","list","-1"); //追加数组内容
1
2
3
2
3
# append(Object data,String...keys)
# 方法说明
- data: 追加文件的内容,追加的内容大小会被FileCache计入
- keys: 与writeKeys同理
fileCache.append(i,"sectionwork","src","0"); //追加数组的某个元素
fileCache.append(i,"sectionwork","src","-1"); //追加数组
fileCache.append(i,"barrage","src"); //追加类中的元素
1
2
3
2
3
# 启用文件缓存定时监控
当你文件写入的内容可能不足以填充满缓存池触发写入机制,但你又想自动进行持久化,这个时候你可以将该文件加入到FileCacheManager
中,FileCacheManager是专门负责文件定时刷入监控的管理类,他负责监听所有加入进来的文件缓存类,并进行定时刷入
如果你想要加入你的fileCache,你只需按照下述方法加入即可
FileCacheManagerInstance.getInstance().addFileCache(你的文件缓存);
1
如果你想手动刷入缓存,可以使用fileCache的forceSync
方法
fileCache.forceSync()
1
# 全局FileCache
如果你想将FileCache变为全局的,且在启动时加入到文件监控管理中,你可以在GlobalFileCache
中写入你的FileCache
public class GlobalFileCache {
public static FileCache ModuleSrcConfigFile;
//写入你的FileCache
static {
try {
//在此初始化
ModuleSrcConfigFile = new FileCache(new ModuleSrcConfigFile());
} catch (FileCacheException e) {
throw new RuntimeException(e);
}
}
//再此添加到文件监控管理队列中
public static List<FileCache> fileCaches
= List.of(ModuleSrcConfigFile);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 核心类描述
# FileCache
简述
ConfigFile的文件缓存池,负责文件内容的缓存与刷入
# FileCacheManager
# FileCacheManagerInstance
# GlobalFileCache
更多例子可查看test包下面的samples
- FileCacheTest (opens new window)
帮助我们改善此页面! (opens new window)
上次更新: 2023/08/02, 19:40:58