- expire 改为 update+refresh_ttl:键不存在返回 false,与 del/update 约定一致 - _require_string 适配 Boost 1.83(boost::json::string 已非 std::string) - 新增 --backlog(默认 128,libmsg 默认 10 短连接突刺易丢连接) - Makefile 补 HOST/PORT 默认值,test-memdb 用 PID 文件替代失效的 kill %1 - 补测试:复制构造/源销毁后副本有效/refresh 延长 TTL/expire 不存在键
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(键不存在返回 false) |
show |
— | [{key,value},...] |
导出所有条目 |
配置
ServerConfig 结构体(src/memdb.cpp):
| 字段 | 默认值 | 说明 |
|---|---|---|
listen_host |
127.0.0.1 |
监听地址 |
listen_port |
8011 |
监听端口 |
workers |
4 |
线程池大小 |
max_time |
600 |
默认 TTL(秒),10 分钟 |
backlog |
128 |
listen() backlog(libmsg 默认 10,短连接突刺易丢连接) |
构建与运行
前置依赖:g++(C++20)、libmsg、libmemdb、boost::json
# 构建
bash _set.sh
# 运行
bash _run.sh
客户端示例
#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