REDis
This commit is contained in:
1 parent
52497957f3
commit
c31602593a
13 files changed
+453
-31
No files matched your search
@@ -5,6 +5,13 @@ SQLITE_PATH=./data/exam.sqlite
|
|||||||
HOST=127.0.0.1
|
HOST=127.0.0.1
|
||||||
PORT=4173
|
PORT=4173
|
||||||
|
|
||||||
|
# 可选 Redis 公开接口缓存;未设置 REDIS_URL 时自动禁用并直接读取数据库。
|
||||||
|
# REDIS_URL=redis://127.0.0.1:6379/0
|
||||||
|
# REDIS_CACHE_PREFIX=exam-information
|
||||||
|
# REDIS_CACHE_TTL_SECONDS=60
|
||||||
|
# REDIS_RESULTS_CACHE_TTL_SECONDS=86400
|
||||||
|
# REDIS_CONNECT_TIMEOUT_MS=1500
|
||||||
|
|
||||||
# 仅在首次创建空数据库时使用。部署前务必修改初始密码。
|
# 仅在首次创建空数据库时使用。部署前务必修改初始密码。
|
||||||
INITIAL_ADMIN_USERNAME=admin
|
INITIAL_ADMIN_USERNAME=admin
|
||||||
INITIAL_ADMIN_PASSWORD=Admin123!
|
INITIAL_ADMIN_PASSWORD=Admin123!
|
||||||
|
|||||||
@@ -68,6 +68,7 @@
|
|||||||
- HttpOnly、SameSite 登录 Cookie
|
- HttpOnly、SameSite 登录 Cookie
|
||||||
- 服务端角色权限校验
|
- 服务端角色权限校验
|
||||||
- SQLite / MySQL 8.4 双数据库持久化
|
- SQLite / MySQL 8.4 双数据库持久化
|
||||||
|
- 可选 Redis 公开接口缓存,支持写后版本失效、热点请求合并和故障回源
|
||||||
- 规范关系模型、外键、唯一约束和业务索引
|
- 规范关系模型、外键、唯一约束和业务索引
|
||||||
- 业务写入与审计日志使用原子事务提交
|
- 业务写入与审计日志使用原子事务提交
|
||||||
- 关键管理操作审计日志
|
- 关键管理操作审计日志
|
||||||
@@ -146,6 +147,20 @@ npm start
|
|||||||
|
|
||||||
也可以只设置标准连接地址 `DATABASE_URL=mysql://user:password@host:3306/database`。完整模板见 `.env.example`;将模板复制为 `.env` 后取消 MySQL 配置项的注释并填写实际连接信息即可。生产部署仍建议由部署平台注入环境变量,避免在服务器文件中保存密码。
|
也可以只设置标准连接地址 `DATABASE_URL=mysql://user:password@host:3306/database`。完整模板见 `.env.example`;将模板复制为 `.env` 后取消 MySQL 配置项的注释并填写实际连接信息即可。生产部署仍建议由部署平台注入环境变量,避免在服务器文件中保存密码。
|
||||||
|
|
||||||
|
### Redis 缓存(可选)
|
||||||
|
|
||||||
|
配置 `REDIS_URL` 后,应用会缓存公开首页、已发布公告详情和每名考生的已发布成绩查询。公开数据默认 TTL 为 60 秒,成绩默认 TTL 为 24 小时;成绩录入/发布、批量导入、考试归档和成绩复议会自动使成绩缓存失效,超级管理员也可以在成绩管理中心手动刷新全部成绩缓存。Redis 在启动或运行期间不可用时,接口会自动回源数据库,不影响登录、报名和管理功能。
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
$env:REDIS_URL = 'redis://127.0.0.1:6379/0'
|
||||||
|
$env:REDIS_CACHE_PREFIX = 'exam-information'
|
||||||
|
$env:REDIS_CACHE_TTL_SECONDS = '60'
|
||||||
|
$env:REDIS_RESULTS_CACHE_TTL_SECONDS = '86400'
|
||||||
|
npm start
|
||||||
|
```
|
||||||
|
|
||||||
|
生产环境可使用 `redis://` 或启用 TLS 的 `rediss://` 连接地址,并通过 `REDIS_CONNECT_TIMEOUT_MS` 调整启动连接超时。
|
||||||
|
|
||||||
### 导入服务器 MySQL 测试数据
|
### 导入服务器 MySQL 测试数据
|
||||||
|
|
||||||
先停止正在运行的应用进程,确认服务器 `.env` 中已经设置 `DATABASE_CLIENT=mysql` 及完整 MySQL 连接参数,然后执行:
|
先停止正在运行的应用进程,确认服务器 `.env` 中已经设置 `DATABASE_CLIENT=mysql` 及完整 MySQL 连接参数,然后执行:
|
||||||
|
|||||||
@@ -223,6 +223,11 @@ document.addEventListener('click', async event => {
|
|||||||
state.resultImportPreview = null;
|
state.resultImportPreview = null;
|
||||||
return renderRoute();
|
return renderRoute();
|
||||||
}
|
}
|
||||||
|
if (action === 'refresh-results-cache') {
|
||||||
|
const result = await api('/api/admin/results/cache/refresh', { method: 'POST' });
|
||||||
|
toast(result.refreshed ? '成绩缓存已刷新' : '成绩缓存未刷新', result.message);
|
||||||
|
return renderRoute();
|
||||||
|
}
|
||||||
if (action === 'generate-admit') {
|
if (action === 'generate-admit') {
|
||||||
const registration = state.pageData.registrations.find(item => item.id === target.dataset.id);
|
const registration = state.pageData.registrations.find(item => item.id === target.dataset.id);
|
||||||
if (registration.admitCard) return openAdmitPreview(registration);
|
if (registration.admitCard) return openAdmitPreview(registration);
|
||||||
|
|||||||
Loaded 3 of 13 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user