ChopperBot ChopperBot
首页
  • 快速开始
  • 开发指南
  • 技术文档
  • 使用配置
生态
问答
💖支持
🚀起飞诶~~起飞
更新日志 (opens new window)
GitHub (opens new window)
首页
  • 快速开始
  • 开发指南
  • 技术文档
  • 使用配置
生态
问答
💖支持
🚀起飞诶~~起飞
更新日志 (opens new window)
GitHub (opens new window)
  • 模块文档

    • common

      • common目录
    • FileModule

      • FileModule目录
      • FileCache
        • FileCache说明
        • 使用
          • 进行文件缓存
          • 文件缓存操作
          • 启用文件缓存定时监控
          • 全局FileCache
        • 核心类描述
          • FileCache
          • FileCacheManager
          • FileCacheManagerInstance
          • GlobalFileCache
    • BarrageModule

    • AccountModule

    • CreeperModule

    • HotModule

目录

FileCache

# FileCache说明

image

说明

由于ChopperBot中使用了大量的Json文件来保存配置或数据 而有些Json文件可能会被频繁的操作,而FileCache就是用来解决文件的频繁写入造成的IO问题,FileCache具备了简单的文件操作功能,文件缓存池,文件刷入,文件定时刷入,文件版本对照功能, 方便开发人员对文件的操作与管理。

  • 文件缓冲池:写入内容快速写入缓存,无需等待IO
  • 多种文件sync机制:达到缓冲池上限触发sync,定时监控进行sync
  • 快速的文件操作:快速的查看,修改文件内容
  • 文件版本对照机制:比对新老文件版本,减少无意义的刷入

# 使用

# 进行文件缓存

  1. 先创建一个类继承ConfigFile类
  2. 创建一个FileCache类并将ConfigFile放入Cache中即可
ModuleSrcConfigFile chopperBotConfigFile = new ModuleSrcConfigFile();
FileCache fileCache = new FileCache(chopperBotConfigFile);
1
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

# 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

# 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

# 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

# 启用文件缓存定时监控

当你文件写入的内容可能不足以填充满缓存池触发写入机制,但你又想自动进行持久化,这个时候你可以将该文件加入到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

# 核心类描述

# FileCache

简述

ConfigFile的文件缓存池,负责文件内容的缓存与刷入

# FileCacheManager

# FileCacheManagerInstance

# GlobalFileCache

  • 更多例子可查看test包下面的samples
  • FileCacheTest (opens new window)
帮助我们改善此页面! (opens new window)
上次更新: 2023/08/02, 19:40:58
FileModule目录

← FileModule目录

Theme by Vdoing | Copyright © 2016-2023 TimeMachine Lab | Sponsored by JetBrains | 渝ICP备2021000141号-1

友情链接:GeniusBlog

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式