Skip to content
页面信息
📝 描述系统级键值设置存储,基于 MongoDB 并带有内存缓存
📥 导入import { SystemModel } from 'hydrooj'

SystemModel

系统级键值设置存储,基于 MongoDB 并带有内存缓存。

SystemModelSystemModelService(继承 Service)的 serviceInstance 代理。在启动时将所有系统设置加载到内存缓存中,并通过广播总线保持集群节点间同步。


方法

读写操作

get(key: K): SystemKeys[K]

从内存缓存中获取单个系统设置。

参数类型默认值说明
keyK extends keyof SystemKeys | string设置键
返回值SystemKeys[K] | any缓存值
typescript
const serverName = SystemModel.get('server.name'); // string
const smtpPort = SystemModel.get('smtp.port');      // number

getMany(keys: (keyof SystemKeys)[]): any[]

一次获取多个系统设置。对最多 6 个键提供类型化元组返回。

参数类型默认值说明
keys(keyof SystemKeys)[]设置键数组
返回值any[](对 ≤6 个键为类型化元组)按相同顺序排列的缓存值数组
typescript
const [name, url] = SystemModel.getMany(['server.name', 'server.url']);

set(_id: K, value: SystemKeys[K], broadcast?: boolean): Promise<SystemKeys[K]>

将设置写入 MongoDB,更新本地缓存,并可选地广播到其他集群节点。

参数类型默认值说明
_idK extends keyof SystemKeys | string设置键
valueSystemKeys[K] | any要存储的值
broadcastbooleantrue是否在集群节点间同步
返回值Promise<SystemKeys[K]>存储的值
typescript
await SystemModel.set('server.name', 'My Judge');
await SystemModel.set('custom.key', data, false); // 仅本地

属性

属性类型说明
collMongoDB.Collectionsystem MongoDB 集合
cacheRecord<string, any>所有设置的内存缓存;启动时从默认值和数据库填充

类型导出

SystemKeys

SystemKeys 接口(packages/hydrooj/src/interface.ts)中定义的已知类型化键:

类型
smtp.userstring
smtp.fromstring
smtp.passstring
smtp.hoststring
smtp.portnumber
smtp.secureboolean
installidstring
server.namestring
server.urlstring
server.xffstring
server.xhoststring
server.hoststring
server.portnumber
server.languagestring
limit.problem_files_maxnumber
problem.categoriesstring
session.keysstring[]
session.saved_expire_secondsnumber
session.unsaved_expire_secondsnumber
user.quotanumber

也可使用任意字符串键——返回类型为 any


备注

  • 在服务启动时([Service.init]),SystemModel 执行以下操作:
    1. SYSTEM_SETTINGS 加载默认值
    2. 读取 system MongoDB 集合中的所有文档并填充 cache
    3. 触发 database/config 事件
    4. 订阅 system/setting 广播事件以保持集群节点间缓存同步