Files
blackbird/memdb/README.md
T
qing 26de527a09 feat(memdb×libmemdb): memdb 服务化落地——RPC 服务端 + 构建/测试/部署闭环
- libmemdb: 补全 flush() 惰性 TTL 驱逐;修复 explicit 误用/头文件缺失/
  时间戳碰撞误删;size()/get_db() 前 flush 消除脏读;三处双重哈希查找
  合并;index_keys 去冗余字段;update(refresh_ttl) 改原地重索引,
  免 remove+insert 的拷贝与重复 flush
- memdb: 重写 RPC 服务端(libmsg RpcServer, :8011, 9 路由, mutex 保护);
  补全 Makefile/_set.sh/_run.sh 与 --instance/--log-level CLI;
  SIGINT/SIGTERM 优雅退出;注册 services.yaml
- 测试: libmemdb 单元测试 22 例 + memdb RPC 集成测试 12 场景(含并发)
- 清理: 删除误合入的 db2/create_sqlite3.sql 旧版(scripts/ 下为权威版)
2026-08-15 09:27:12 +08:00

83 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# memdb — 内存缓存数据库
基于 `libmemdb` 模板库的 JSON RPC 缓存服务,提供键值存储、TTL 过期、并发安全的内存缓存能力。
## 架构
```
Memdb<std::string, std::string> (libmemdb 模板:LRU 链表 + 哈希索引 + TTL 过期)
└── MemdbServer (RPC 服务端:路由注册 + 互斥锁线程安全)
└── pmc::net::RpcServer (libmsg JSON RPC 服务端:多客户端 select + 线程池)
```
## 路由
| 路由 | 参数 | 返回 | 说明 |
|------|------|------|------|
| `ping` | — | `"pong"` | 健康检查 |
| `set` | `key`, `value` | `true/false` | 插入键值对(key 已存在返回 false) |
| `get` | `key` | `"value"` / `null` | 查询键值 |
| `del` | `key` | `true/false` | 删除键 |
| `update` | `key`, `value`, `refresh_ttl?` | `true/false` | 更新值,可选刷新 TTL |
| `exists` | `key` | `true/false` | 键是否存在 |
| `size` | — | `int` | 当前条目数 |
| `expire` | `key`, `value` | `true/false` | 更新值并重置 TTL(del + set) |
| `show` | — | `[{key,value},...]` | 导出所有条目 |
## 配置
`ServerConfig` 结构体(`src/memdb.cpp`):
| 字段 | 默认值 | 说明 |
|------|--------|------|
| `listen_host` | `127.0.0.1` | 监听地址 |
| `listen_port` | `8011` | 监听端口 |
| `workers` | `4` | 线程池大小 |
| `max_time` | `600` | 默认 TTL(秒),10 分钟 |
## 构建与运行
**前置依赖**:g++(C++20)、libmsg、libmemdb、boost::json
```bash
# 构建
bash _set.sh
# 运行
bash _run.sh
```
## 客户端示例
```cpp
#include <us/RpcClient.hpp>
pmc::net::RpcClient rpc("127.0.0.1", 8011, "memdb-client");
// 插入
json::object params;
params["key"] = "session:abc123";
params["value"] = R"({"user":"admin","role":"root"})";
rpc.call("set", params); // → true
// 查询
rpc.call("get", {{"key", "session:abc123"}}); // → "{\"user\":\"admin\",...}"
// 检查存在
rpc.call("exists", {{"key", "session:abc123"}}); // → true
// 查看大小
rpc.call("size"); // → 1
```
## 项目结构
```
memdb/
├── src/
│ └── memdb.cpp # MemdbServer + main()
├── Makefile
├── _set.sh
├── _run.sh
└── README.md
```