Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
中文 | English
Rust 多级缓存库:L1 内存 + L2 分布式
✨ 功能特性 • 🚀 快速开始 • 📚 文档 • 💻 示例 • 🤝 参与贡献
🚀 多级缓存,纳秒级热路径
#[cached] 宏一行启用,L1/L2 后端经 ChainCache 自由组链:
📋 目录
- ✨ 功能特性
- 🚀 快速开始
- 🎨 特性标志
- 📚 文档
- 💻 示例
- 🏗️ 架构
- 🧪 测试
- 📊 性能
- 🔒 安全
- 🗺️ 开发路线图
- 🤝 参与贡献
- 📋 更新日志
- 📄 许可证
- 🙏 致谢
- 📞 联系与支持
- ⭐ Star 历史
✨ 功能特性
- 分布式锁(
lock):Redis TTL 锁、watchdog 自动续期、可重入获取 - RedLock(
red-lock):多节点多数派锁、INCRfencing token 单调防回退 - 跨实例失效(
invalidation):Redis Pub/Sub 广播失效事件,键空间通知第二通道 - 值级加密(
encrypt):XChaCha20-Poly1305 信封,AAD 绑定键名防换键移植 - 值完整性(
integrity):HMAC-SHA256 标签,校验失败视为 miss 并计数 - 版本化 CAS(
versioning):内存版与 Redis WATCH/MULTI/EXEC 版compare_and_swap - 配置驱动(
config-confers):confers 加载容量 / TTL / 熔断参数,ConfigBuswatch 热更新 - 自动降级(
degradation):Active / Degraded / HalfOpen 三态状态机,探测成功自动恢复 - 审计事件流(
audit):结构化 hit / miss / set / delete / evict / expired 事件,键脱敏 - 宏高级参数:
single_flight并发 miss 去重、strict未注册 panic、condition谓词旁路 - 分层构建器:
L1Builder/L2Builder/ChainBuilder链式组合 - 生命周期集成(
kit):trait-kit AsyncKit 的OxcacheModule、健康检查、三阶段关闭、后端装饰器 - 错误国际化:基于 ICU4X 的错误消息 i18n 与系统语言自动检测
- 穿透防护配置:
null_cache_ttl空值哨兵 TTL、ttl_jitterTTL 抖动系数
🚀 快速开始
📦 安装
或在 Cargo.toml 中手动添加:
[]
= "0.5.0-rc.4"
= { = "1", = ["rt-multi-thread", "macros"] }
= { = "1", = ["derive"] }
最低要求:Rust 1.97.1+(edition 2024)。默认 minimal 特性仅启用 L1 内存缓存;使用 L2(Redis / Valkey / Dragonfly / Aerospike)需本地可达的对应服务,Redis 相关测试依赖 Docker(testcontainers 自动拉起容器)。
💡 最小可运行示例
以下示例精简自 examples/src/01_basics/example_basic_operations.rs:
use Cache;
use ;
async
函数级缓存只需一行宏(完整版见 examples/src/01_basics/example_cached_macro.rs):
use cached;
async
🧭 核心概念
Cache<K, V>:统一类型安全入口,Cache::builder()配置capacity/ttl/tti/sync_mode- 可插拔后端:
MokaMemoryBackend/DashMapMemoryBackend/RedisBackend/DragonflyBackend/AerospikeBackend经.backend_arc(Arc::new(backend))注入 ChainCache:多后端按分数组链,自高向低读穿透,非最高分命中可异步回填更高分链接#[cached]宏:函数级缓存,经cache.register_for_macro("service")注册后由宏生成代码查找- 同步 API:
.sync_mode(true)开启get_sync/set_sync/get_or_sync同步路径
🎨 特性标志
层级预设(default = ["minimal"],仅 L1):
= { = "0.5.0-rc.4", = ["minimal"] } # 仅 L1(默认)
= { = "0.5.0-rc.4", = ["core"] } # L1 + L2 Redis
= { = "0.5.0-rc.4", = ["full"] } # 全量(不含 bloom / kit 等选择加入特性)
| 标志 | 说明 | 默认 |
|---|---|---|
minimal |
预设:memory + metrics + serialization + chrono,仅 L1 |
✅ |
core |
预设:minimal + redis,L1 + L2 |
❌ |
full |
预设:core + macros / compression / batch / lua / testing / dragonfly / aerospike / lock |
❌ |
memory |
L1 内存后端(Moka + DashMap) | ❌ |
redis |
L2 分布式缓存(Redis / Valkey,Standalone / Sentinel / Cluster) | ❌ |
dragonfly |
Dragonfly 后端(Redis 协议兼容) | ❌ |
aerospike |
Aerospike 后端(独立协议) | ❌ |
macros |
#[cached] 属性宏(oxcache_macros crate) |
❌ |
serialization |
JSON 序列化(serde + serde_json + serde_stacker 深度防护) | ❌ |
metrics |
内置指标:延迟直方图、操作计数、JSON / Prometheus 导出 | ❌ |
batch |
BatchWriter 缓冲批量写入(容量 / 时间双阈值刷盘) |
❌ |
lua |
Lua 脚本执行(依赖 redis) |
❌ |
testing |
测试工具(暴露内部函数) | ❌ |
bloom |
布隆过滤器负查询过滤(BloomFilter + BloomFilterBackend) |
❌ |
lock |
分布式锁:TTL、watchdog 自动续期、可重入(依赖 redis) |
❌ |
red-lock |
RedLock 多节点多数派锁 + fencing token(依赖 lock) |
❌ |
compression |
自适应压缩:zstd 阈值触发,兼容旧 gzip 读取 | ❌ |
telemetry |
tracing 门面:熔断 / 回填 / 宏穿透路径埋点,关闭时零开销 |
❌ |
invalidation |
跨实例失效总线:Redis Pub/Sub 广播 + 键空间通知通道 | ❌ |
encrypt |
值级加密装饰器(XChaCha20-Poly1305,AAD 绑定键名) | ❌ |
integrity |
值完整性装饰器(HMAC-SHA256,校验失败视为 miss) | ❌ |
serde-bincode |
bincode 1.x 二进制序列化格式 | ❌ |
postcard |
postcard 二进制序列化格式 | ❌ |
config-confers |
confers 配置驱动构建 + ConfigBus watch 热更新 |
❌ |
degradation |
自动降级与恢复(Active / Degraded / HalfOpen 三态状态机) | ❌ |
audit |
结构化审计事件流(NoOp / 有界内存环形 / tracing 发布器) | ❌ |
versioning |
版本化 CAS(内存实现 + Redis WATCH/MULTI/EXEC 实现) | ❌ |
kit |
trait-kit AsyncKit 集成(OxcacheModule / 健康检查 / 生命周期 / 关闭 / 装饰器) |
❌ |
bloom与kit等选择加入特性不在full中,需显式启用。
📚 文档
| 文档 | 说明 |
|---|---|
| 📖 用户指南 | 从安装到进阶的完整使用教程 |
| 📘 API 参考 | 全部公开 API 的详细说明与错误码表 |
| 🏗️ 架构文档 | 设计理念、模块职责、数据流与故障处理 |
| 📊 性能基线 | 序列化体积、压缩率、热路径基准与复现命令 |
| 🔒 安全文档 | 安全设计、威胁模型与最佳实践 |
| 🧪 测试场景矩阵 | 功能域到测试落点的映射与执行口径 |
| 🤝 贡献指南 | 开发环境、TDD 工作流与 PR 流程 |
| 📋 更新日志 | 每个版本的变更记录 |
| 📦 在线 API 文档 | docs.rs 自动生成的最新文档 |
| 📦 crates.io | 发布页面 |
💻 示例
examples/ 目录(workspace 成员 oxcache-examples,已设 publish = false)包含 37 个可运行示例:
# 运行单个示例(在 examples/ 目录下)
&&
# 列出所有可用示例
&&
入门(examples/src/01_basics)
| 示例 | 说明 |
|---|---|
example_basic_operations |
基本 CRUD 操作(get / set / delete / exists) |
example_new_api |
现代 API 入门(Cache::builder() / Cache::memory()) |
example_cache_builder |
CacheBuilder 配置(capacity / ttl / tti / sync_mode) |
example_serialization |
JSON 序列化 |
example_cache_key |
自定义缓存键(CacheKey trait) |
example_cached_macro |
#[cached] 宏(service / ttl / key_prefix) |
example_explicit_init |
显式初始化(Cache::new() / 全局缓存) |
example_get_or |
缓存未命中时计算(get_or,单飞) |
example_sync_api |
同步 API(get_sync / set_sync / clear_sync / len_sync) |
example_byte_ops |
字节级操作(get_bytes / set_bytes / len / capacity / shutdown) |
example_comprehensive_usage |
综合使用(全部功能概览) |
进阶(examples/src/02_advanced)
| 示例 | 说明 |
|---|---|
example_batch_write |
批量操作(set_many / get_many / delete_many) |
example_chain_cache |
链式缓存(ChainCache / ChainLink) |
example_invalidation |
缓存失效策略(TTL / TTI / 手动失效) |
example_warmup |
缓存预热(批量预加载) |
example_smart_strategy |
缓存策略模式(Cache-Aside / Lazy Loading / TTL 分层) |
example_cache_promotion |
缓存提升(L2→L1 提升 / 热点分析) |
example_error_handling |
错误处理(OxCacheError / 重试 / 可恢复性) |
example_custom_backend |
自定义后端(CacheReader / CacheWriter / CacheConnector) |
example_dashmap_backend |
DashMap 后端(DashMapMemoryBackend) |
example_moka_ttl |
Moka per-entry TTL(Expiry trait) |
example_redis_native |
Redis 原生操作(RedisBackend,需 Redis) |
example_redis_modes |
Redis 部署模式(Standalone / Cluster / Sentinel,需 Redis) |
example_redis_pipeline |
Pipeline 批量(set_many_pipeline / get_many_pipeline,需 Redis) |
example_lua_script |
Lua 脚本执行(eval_lua / script_load / eval_sha,需 Redis) |
配置(examples/src/03_config)
| 示例 | 说明 |
|---|---|
example_dynamic_config |
动态配置(运行时配置变更) |
example_key_generator |
Key 生成器(KeyGenerator) |
数据库集成(examples/src/05_database)
| 示例 | 说明 |
|---|---|
example_database_integration |
数据库集成(Cache-Aside 模式) |
特性展示(examples/src/06_features)
| 示例 | 说明 |
|---|---|
example_metrics |
指标导出(export_json_format / export_prometheus_format) |
example_compression |
数据压缩(JsonSerializer::with_compression()) |
example_security |
安全脱敏(redact_value / redact_connection_string) |
example_security_validation |
安全验证(validate_redis_key / validate_lua_script) |
example_bloom_filter |
布隆过滤器(BloomFilter / BloomFilterBackend) |
example_i18n |
国际化(CacheI18nFormatter) |
example_events |
事件系统(CacheEvent / CacheEventType) |
example_cli_usage |
CLI 场景(以代码方式获取缓存状态与指标) |
example_kit_integration |
trait-kit AsyncKit 集成(OxcacheModule / 健康检查 / 生命周期 / 三阶段关闭 / 装饰器) |
标注"需 Redis"的示例需要运行中的 Redis 6.0+ 服务;其余示例使用内存后端,可独立运行。
🔄 同步 API
入门示例 example_sync_api 即同步 API 的完整可运行版本。在 builder 上启用 sync_mode(true) 后,异步 API 之外获得完整同步镜像(无需 .await):
use Cache;
use ;
async
何时使用:阻塞调用点(遗留代码、FFI、同步处理器);调用方本身是同步的,避免运行时开销。
运行时注意:
sync_mode(true)需multi_threadtokio 运行时;current_thread运行时上 Moka 的sync_block_on会 panic- 未启用
sync_mode(true)时调用任何*_sync方法返回Err(OxCacheError::NotSupported) sync_mode(true)不能与backend_arc(...)组合,同时设置时build()返回Err(OxCacheError::NotSupported)
#[cached] 宏参数:完整参数表(含默认值与 cache_none)见 API 参考的缓存宏章节;与同步路径相关的参数为 sync(生成同步函数,无需 async 运行时)。
🏗️ 架构
Oxcache 采用「统一接口 + 可插拔后端」的分层设计:应用只面对 Cache<K, V> 一个类型安全入口,读写落到实现 CacheReader / CacheWriter / CacheConnector 三个 trait 的后端上(blanket impl 组合为 CacheBackend);L1(Moka / DashMap)与 L2(Redis / Valkey / Dragonfly / Aerospike)可单独使用,也可经 ChainCache 按分数组链并按需回填,features 模块以装饰器形态叠加布隆过滤器、分布式锁、加密等能力。分层架构图、模块职责与数据流见架构文档;batch、integrations::kit、i18n、config、traits、testing 等模块按特性门控挂载。
宏执行路径
#[cached] 宏展开后:按服务名查注册表,命中即反序列化返回;未命中执行原函数并将 Ok 结果序列化回写。未注册服务默认静默穿透执行原函数,strict 模式改为 panic。完整时序图与展开代码见架构文档的数据流章节。
链式缓存读取路径
读取自最高分链接起穿透,非最高分链接命中时可异步回填(流程图见架构文档)。单链接失败仅记录警告并继续下一链接,仅当全部链接失败时读取才报错;写入并发下发到所有写入者链接,单链接写入失败被容忍。enable_race_read() 启用后改为并发查询全部链接并返回首个命中。
可靠性要点:
- 单飞去重(
get_or/get_or_sync,64 分片降低锁竞争) - ChainCache 链路容错(单链接故障不阻塞整体读写)
- 可选自动降级(
degradation特性,半开探测自动恢复) - 健康检查(ChainCache 并发 ping,每链接 5 秒超时)
- 优雅关闭(
shutdown;kit特性映射到三阶段关闭协调)
🌸 布隆过滤器与穿透防护
bloom 特性(需显式启用,不在 full 中)提供负查询过滤。BloomFilterBackend 装饰任意后端:布隆过滤器判定「一定不存在」时直接返回 None,inner 后端完全不被触及。
flowchart TD
A["backend.get key"] --> B{"布隆过滤器包含 key?"}
B -->|一定不存在| C["直接返回 None<br/>inner 后端未被触及"]
B -->|可能存在| D["查询 inner 后端"]
D --> E["返回结果"]
use MokaMemoryBackend;
use ;
async
语义:无假阴性;set 同时更新 BF 与 inner,delete 只更新 inner(BF 不支持删除),clear 两者皆清,TTL 原样透传;inner 实现 SyncCacheBackend 时装饰器同样实现。
穿透与击穿防护组合:
| 机制 | 入口 | 作用 |
|---|---|---|
| 单飞去重 | get_or / get_or_sync / 宏 single_flight |
同 key 并发 miss 仅一个调用者回源,跟随者等待结果(异步 Notify / 同步 Condvar,64 分片) |
| 空值哨兵 | get_or_option + null_cache_ttl |
对 None 结果缓存哨兵,避免不存在的键反复打到存储 |
| TTL 抖动 | builder ttl_jitter(factor) |
实际 TTL 在 base * (1 ± factor) 内随机,防止批量同时过期 |
| 布隆过滤 | BloomFilterBackend |
负查询 O(1) 短路,inner 后端零请求 |
⏱️ TTL 行为对照表
所有后端统一遵守 per-entry set(key, value, Some(ttl))。行为汇总:
| 后端 | set(ttl=Some) |
ttl(key) |
expire(key, new_ttl) |
说明 |
|---|---|---|---|---|
| MokaMemoryBackend | 通过 moka::Expiry 真实 per-entry TTL |
剩余 TTL | 更新 + 返回 true |
全局 TTL(builder.ttl(...))被 per-entry TTL 覆盖 |
| DashMapMemoryBackend | 存储 (value, expiry Instant);读取时懒过期 |
剩余 TTL(无 TTL 则 None) | 更新 + 返回 true |
懒过期,条目在下次访问时移除;超容量时 FIFO O(1) 淘汰最旧条目 |
| RedisBackend | SET key value EX ttl |
TTL key(Redis 原生) |
EXPIRE key ttl |
使用 Redis 原生 TTL |
| Valkey(经 RedisBackend) | 同 Redis | 同 Redis | 同 Redis | Redis 协议兼容,使用 ValkeyStandalone 模式 |
| DragonflyBackend | 委托内部 RedisBackend | 委托内部 RedisBackend | 委托内部 RedisBackend | Redis 协议兼容,TTL 行为与 Redis 一致 |
| AerospikeBackend | write_policy_with_ttl → Expiration::Seconds |
record.time_to_live() |
touch + 新 Expiration |
Aerospike 原生 TTL(秒级精度),亚秒 TTL 上取整 |
| MockBackend | 存储 (value, expiry Instant);懒过期 |
剩余 TTL | 更新 + 返回 true |
仅测试用,与 DashMap 语义对齐 |
| ChainCache | 将 ttl 透传到所有链接 |
返回拥有该 key 的最高分链接的 TTL | 透传到所有链接 | 所有链接接收相同 TTL |
| BloomFilterBackend | 将 ttl 透传到 inner(同时插入 key 到 BF) |
委托给 inner | 委托给 inner | BF 本身无 TTL 概念 |
全局与 per-entry 的关系:builder.ttl(Duration) 设置作用于每个条目的全局 TTL;set(key, value, Some(ttl)) 覆盖该条目;set(key, value, None) 沿用全局 TTL(未设置则永不过期)。
🧪 测试
测试套件按 tests/README.md 组织,场景矩阵见 docs/TEST_SCENARIOS.md。
| 层级 | 运行入口 | 覆盖内容 | 测试函数数¹ |
|---|---|---|---|
| 库单元测试 | --lib |
src/ 内 #[cfg(test)] 测试 |
1335 |
| 单元测试 | --test unit |
后端接口、CacheBuilder、序列化、指标、日志脱敏等 | 331 |
| 集成测试 | --test integration |
批量写入、链式缓存、降级与恢复、TTL、Redis Cluster / Sentinel、分布式锁等 | 131 |
| 端到端测试 | --test e2e |
基础操作、#[cached] 宏、真实业务场景、高级场景 |
65 |
| 宏测试 | --test macros |
sync / skip_cache_write 模式与 trybuild 编译失败用例 |
11 |
| 安全测试 | --test security |
安全覆盖与安全验证 | 20 |
| 混沌测试 | --test chaos |
后端故障注入、网络故障、随机故障 | 19 |
| 性能测试 | --test performance |
内存泄漏检测、Miri 内存安全、Pipeline 性能 | 19 |
| Feature 门控 | --test feature_test;--features "full,bloom" --test bloom_filter_integration |
窄特性组合、布隆过滤器集成 | 2 + 7 |
¹
#[test]/#[tokio::test]函数 grep 统计,截至 0.5.0-rc.4;合计 1900+(src/1335 +tests/606)。
常用命令(与 CI 一致)
# CI test 矩阵以 minimal / core / full 三档运行
# 按测试二进制运行
# 窄特性组合检查(CI feature-core / feature-minimal job)
# 跳过需要 Redis 的测试
# 覆盖率(CI 与 pre-push 门禁:行覆盖 >= 80%)
Redis 相关测试经 testcontainers 自动拉起
redis:7-alpine容器,需要本机 Docker;集成 / E2E 禁用 test double,使用进程内真实实现与混沌式故障注入替身(口径见 docs/TEST_SCENARIOS.md)。
📊 性能
量级参考(L1/L2 吞吐与 P99 延迟,M1 Pro / 16GB RAM / macOS / Redis 7.0 基准环境;性能因硬件、网络条件和数据大小而异)见架构文档的基准测试章节。可复现实测数据(序列化体积、压缩率、热路径基准与复现命令)见性能基线。
要点速览:热路径借用键 API(get_by_str / set_by_str)实测 get -6.7%、set -12.7%;序列化格式切换(serde-bincode / postcard)下 postcard 混合负载传输体积约为 JSON 的 46%。
Criterion 基准代码位于 benches/:modern_api_benchmark、hot_path_benchmark、redis_benchmark、serialization_benchmark、dashmap_benchmark、dragonfly_benchmark,运行方式如 cargo bench --bench hot_path_benchmark。
🔒 安全
Oxcache 在库层面内建多层防御,完整安全设计、威胁模型与安全修复记录见 安全文档。
漏洞报告:请勿通过公开 Issue 报告安全漏洞。请使用 GitHub Security Advisories 私密披露通道提交(48 小时内确认,7 天内给出初步评估,报告者可在修复发布前预览验证补丁)。
| 防线 | 机制 |
|---|---|
| 键校验 | validate_redis_key:拒绝空键、超过 512 KB、含 \r / \n / \0 的键,扫描 SQL 注入与路径遍历模式 |
| Lua 沙箱 | validate_lua_script:10 KB 上限、100 键上限、危险命令黑名单(FLUSHALL / CONFIG / SHUTDOWN 等)、注释与字符串预处理防绕过、30 秒超时 |
| SCAN 限制 | validate_scan_pattern(256 字符、10 个通配符上限)+ clamp_scan_count(钳制到 1-1000)、30 秒超时 |
| TLS 强制 | RedisBackend 默认要求 rediss://,除非显式设置 OXCACHE_ALLOW_INSECURE_REDIS 开发豁免 |
| 脱敏 | redact_connection_string / redact_value / Redacted 包装器,日志与审计事件中的键与凭据默认脱敏 |
| 内存安全 | crate 根 #![deny(unsafe_code)] |
| 值保护 | encrypt(XChaCha20-Poly1305,AAD 绑定键名)与 integrity(HMAC-SHA256)装饰器 |
| 反序列化防 DoS | MAX_JSON_DEPTH 深度限制 + 64 MiB 反序列化大小上限 + 基于栈的递归(serde_stacker) |
| 供应链 | CI 全部第三方 Action 以 commit SHA 固定;cargo deny check(漏洞 / 许可证 / 重复依赖,配置见 deny.toml)与 cargo audit 常开 |
安全 API(公共验证函数):
use ;
validate_redis_key.expect;
validate_lua_script.expect;
validate_scan_pattern.expect;
🗺️ 开发路线图
| 状态 | 事项 | 说明 |
|---|---|---|
| 📋 | 0.5.0 正式发布 | 当前版本 0.5.0-rc.4(Cargo.toml);完成发布流程验证后推送 tag 触发 release.yml 自动发布到 crates.io |
| 📋 | 下游版本传导 | dbnexus、inklog、limiteron、sdforge 同步对 oxcache 的依赖要求至 0.5(path + version 双写) |
| 📋 | Valkey 集成测试环境门控 | 8 个 Valkey 集成测试依赖 Docker(testcontainers),无 Docker 环境无法运行,为验收记录中的已知限制 |
| 📋 | 质量审查留档项跟进 | 代码质量审查(diting)留档的 3 项 Medium 建议与 2 项 Low 记录,按优先级评估处理 |
🤝 参与贡献
欢迎提交 Pull Request 和 Issue!参与开发请先阅读 贡献指南。
- 工具链:
rust-toolchain.toml固定 1.97.1(edition 2024) - 本地门禁:pre-commit / lefthook hooks 覆盖
cargo fmt --check、cargo clippy --all-targets --all-features -- -D warnings、cargo deny check、私钥与密钥扫描;pre-push 追加cargo audit与行覆盖 ≥ 80% 门禁 - 提交信息:conventional commits(
feat/fix/refactor/docs等,commit-msg hook 校验) - TDD 工作流:定接口 → 写测试(red)→ 写实现(green)→ 提交 → 影响分析
📋 更新日志
完整版本历史见 CHANGELOG.md。最近要点:
- 0.5.0-rc.4(2026-09-10):
#[cached]宏高级参数(single_flight/strict/condition);telemetry/encrypt/integrity/serde-bincode/postcard/config-confers/degradation/audit/versioning/red-lock/invalidation特性落地;热路径借用键 API(get -6.7%、set -12.7%);移除空壳cli特性 - 0.5.0-rc.3(2026-09-08):熔断器状态转换竞态修复;Lua 注入校验与 Redis 密码脱敏加固;CI 供应链加固(58 处第三方 Action 引用 SHA 固定)
- 0.4.3(2026-08-06):
kit特性扩展(构建观察者、CacheBackend关闭映射三阶段协调、后端装饰器注册)
📄 许可证
本项目基于 MIT + Commons Clause 许可证发布,商业使用需单独授权。详见 LICENSE。
🙏 致谢
Oxcache 构建在众多优秀的开源项目之上:
- Moka 与 DashMap ,L1 内存缓存后端
- redis-rs ,Redis / Valkey / Dragonfly / Sentinel / Cluster 客户端
- aerospike-client-rust ,Aerospike 后端
- Tokio 与 Serde ,异步运行时与序列化生态
- trait-kit ,AsyncKit 集成(生命周期 / 健康检查 / 关闭协调)
- testcontainers-rs 与 Criterion ,集成测试与基准测试基础设施
📞 联系与支持
- Issue 反馈:GitHub Issues(提供 Bug 报告 / 功能建议 / 问题咨询三类模板)
- 安全漏洞:请勿通过公开 Issue 报告安全漏洞,参见 安全文档 中的漏洞报告流程
- 维护者:Kirky.X
⭐ Star 历史
💝 支持本项目
如果这个项目对你有帮助,请考虑给它一个 ⭐️!
Made with love by Kirky.X