基于 Actix-web 和 SQLx 的高性能 Rust 版【一言服务】实现,提供轻量、安全、高性能的 API。支持数据库切换、限流、内存优化等参数配置。
- 🔌 多数据库支持:MySQL / SQLite
- 🚀 高性能:异步架构 + 编译时 SQL 优化
- 💡 内存优化模式:
--memory可将数据加载至内存数据库,进一步加速 3–10 倍(0.7.1+ 版本因未知问题可能导致性能下降) - 🧠 动态配置:线程数、连接池、监听地址等可灵活调整
- 📏 智能查询:按类型、长度与格式返回数据
- 🛡️ 生产就绪:连接池、异态 I/O、Litmus-tested 异步安全
- 📊 内置请求限流器:可防止 DDoS 或突增请求穿透系统
- ✅ Rust 工具链 v1.85+
- 🗄 数据库支持(任选其一):
- MySQL 5.7+ / MariaDB 10.3
- SQLite 3.35+(推荐用于调试场景)
我们为以下平台提供 Release:
x86_64-unknown-linux-gnux86_64-unknown-linux-muslx86_64-pc-windows-msvcaarch64-unknown-linux-gnuaarch64-unknown-linux-musl
# 标准构建
cargo build --release终端启动示例(带内存模式 + 数据库 & worker 配置):
# 使用默认 MySQL 配置
HITOKOTO_DB="mysql://root:password@localhost/hitokoto" \
./target/release/hitokoto-rust
# 启动 SQLite,内存优化,8 工作线程
./target/release/hitokoto-rust \
--database "sqlite://./1.db" \
--memory \
--workers 8
# 启用限流(每秒最多 100 个请求)
./target/release/hitokoto-rust --limiter --limiter_rate 100| 参数 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
-h / --host |
HITOKOTO_HOST |
0.0.0.0 |
服务绑定地址 |
-p / --port |
HITOKOTO_PORT |
8080 |
服务开放端口 |
-d / --database |
HITOKOTO_DB |
mysql://root:password@localhost/hitokoto |
数据库连接详情(DSN) |
-w / --workers |
HITOKOTO_WORKERS |
CPU 核心数 | 指定适量线程关系以优化多核调度 |
-m / --memory |
HITOKOTO_MEMORY |
false |
预加载数据至内存 SQLite |
--limiter |
HITOKOTO_LIMITER |
false |
启用限流器 |
--limiter_rate |
HITOKOTO_LIMITER_RATE |
10 |
限流速率:RPS(每秒请求) |
--init |
- | false |
初始化数据库 |
--max-connections |
HITOKOTO_MAX_CONNECTIONS |
10 |
最大数据库连接池大小 |
8 worker
target/release/hitokoto-rust -d sqlite://1.db -w 8$ wrk -t8 -c1000 -d10s --latency http://127.0.0.1:8080
Running 10s test @ http://127.0.0.1:8080
8 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 17.29ms 1.55ms 55.62ms 95.23%
Req/Sec 7.26k 522.77 8.06k 86.62%
Latency Distribution
50% 17.03ms
75% 17.56ms
90% 18.19ms
99% 22.83ms
577905 requests in 10.05s, 262.97MB read
Requests/sec: 57479.24
Transfer/sec: 26.16MB
$ neofetch
██████████████████ ████████ moyan@moyan-pc
██████████████████ ████████ --------------
██████████████████ ████████ OS: Manjaro Linux x86_64
██████████████████ ████████ Kernel: 6.15.6-zenm1+
████████ ████████ Uptime: 21 hours, 25 mins
████████ ████████ ████████ Packages: 1844 (pacman)
████████ ████████ ████████ Shell: zsh 5.9
████████ ████████ ████████ CPU: Intel Xeon E5-2673 v3 (24) @ 3.100GHz
████████ ████████ ████████ Memory: 4635MiB / 31991MiB
████████ ████████ ████████
████████ ████████ ████████
████████ ████████ ████████Hitokoto-Rust的性能:
✅ 低延迟
- P99: 22.83ms
- P75/P90: 17.56ms / 18.19ms
- 平均响应时间:17.29ms
✅ 高吞吐量
- 57,479请求/秒 (QPS)
- 支撑300万+请求/分钟
✅ 极致轻量化
- 内存占用低至 51.8MB
GET /
| 参数 | 类型 | 示例值 | 说明 |
|---|---|---|---|
c |
str |
a,b,c |
类型过滤(逗号分隔) |
encode |
str |
text/json |
响应格式设定 |
min_length |
int |
50 |
最小字符数 |
max_length |
int |
100 |
最大字符数(谢绝超长语句穿透) |
| 参数 | 说明 |
|---|---|
| a | 动画 |
| b | 漫画 |
| c | 游戏 |
| d | 文学 |
| e | 原创 |
| f | 来自网络 |
| g | 其他 |
| h | 影视 |
| i | 诗词 |
| j | 网易云 |
| k | 哲学 |
| l | 抖机灵 |
| 其他 | 作为 动画 类型处理 |
可选择多个分类,例如:
?c=a,c
{
"uuid": "bb596739-d5ac-433c-9c4c-406387287576",
"text": "哪怕前方荆棘密布,也曾由我亲手斩尽。",
"type": "e",
"from": "MoYan",
"from_who": null,
"length": 30,
"created_at": "2025-08-04T19:32:26Z"
}GET /{uuid}
本地 SQLite / MySQL:
CREATE TABLE IF NOT EXISTS hitokoto (
id INTEGER PRIMARY KEY AUTOINCREMENT,
uuid TEXT UNIQUE NOT NULL,
text TEXT NOT NULL,
type TEXT NOT NULL,
from_source TEXT NOT NULL,
from_who TEXT,
length INTEGER NOT NULL
)0.7.1+ 版本的内存模式因未知问题,可能相较非内存模式存在性能下降
# 指定启用内存加速模式
target/release/hitokoto-rust -d sqlite://1.db -m将语录一次性载入内存数据库,性能可提升 3–10 倍。
HITOKOTO_MAX_CONNECTIONS = (HITOKOTO_WORKERS * 2) + 1- Actix-web:纯异步 Web 框架,提供零损耗 HTTP 服务核心
- SQLx:在 Rust 中无需运行时 ORM,SQL 编译期通过特性自动切换 MySQL / SQLite
- tokio:Rust 高性能异步运行时支持
- mimalloc:兼容性强、延迟低的内存分配器
MIT License © 2025 MoYan