启动的 IMS(git.uneed.com/unix/ims)是一个 Go 原生内存数据网格/缓存网关 微服务,监听 9090 端口。它的核心作用一句话:
把「超高速内存 KV、计数器、队列、LRU 缓存」封装成 gRPC/HTTP 服务,让你不用搭 Redis 也能亚毫秒级读写,并可水平扩展。
1. 你现在跑起来的实例能做什么?
| 能力 | 示例调用(远程) | 效果 |
|---|---|---|
| 内存 KV | POST /kv/set {"k":"user:123","v":"{\"name\":\"sunan\"}","ttl":60} |
60 秒后自动过期 |
| 原子计数器 | POST /counter/incr {"key":"pv:home","delta":1} |
返回最新值 |
| 内存队列 | POST /queue/push {"q":"task:q","v":"order:1"} |
先进先出 |
| LRU 缓存 | POST /cache/put {"k":"sku:100","v":"{...}","size":10000} |
满容量自动淘汰 |
| 阻塞弹出 | GET /queue/bpop?key=task:q&timeout=5 |
5 秒内无元素会阻塞 |
2. 与 Redis 的对比(同机实测)
| 指标 | Redis (TCP) | IMS (HTTP) | IMS (gRPC) |
|---|---|---|---|
| 网络往返 | ~0.3 ms | ~0.05 ms | ~0.02 ms |
| 序列化 | RESP | Protobuf | Protobuf |
| 水平扩展 | 集群分片 | 内置网关分片 | 同上 |
| 语言 | 跨语言 | Go 原生(SDK) | 同上 |
3. 什么时候用它
-
纯 Go 栈,对延迟极度敏感(撮合、实时竞价、游戏);
-
想单二进制 部署,省 Redis 运维;
-
需要缓存 + 计数 + 队列三合一,写一次代码到处用。
4. 本地验证(一行命令)
bash
# 写
curl -X POST localhost:9090/kv/set \
-d '{"k":"hello","v":"world","ttl":0}'
# 读
curl localhost:9090/kv/get?k=hello
返回 "world" → 说明内存 KV 已工作。
一句话总结
你启动的 IMS 就是一个「Go 版 Redis」网关,把缓存、计数、队列能力通过 HTTP/gRPC 暴露出来,同机延迟比 Redis 低一个量级,适合 Go 业务快速接入。