5 个版本
0.2.0 | 2023 年 5 月 16 日 |
---|---|
0.1.3 | 2023 年 5 月 16 日 |
0.1.2 | 2023 年 5 月 14 日 |
0.1.1 | 2023 年 5 月 13 日 |
0.1.0 | 2023 年 5 月 12 日 |
#1050 in 数据库接口
17KB
384 行
(WIP) Rudis
Rust 实现的提供 http 接口的 Redis 服务器迷你版本。内存中的 kv 存储是分片的,并且是并发安全的。受 Tokio 教程 和 Webdis 的启发
这是一个仍在开发中的项目,目前不打算用于生产环境。仅支持基本命令,如 GET 和 SET。未来将添加更多命令。
还有一个实验版本,在支持的内核上自适应地使用 io_uring
。如果内核不支持 io_uring
,将回退到使用 epoll/kqueue
。此版本未发布到 crates,因此需要本地克隆和构建。它需要 nightly rust 编译器 来构建。
安装
cargo install rudis-http
用法
要运行服务器,只需运行
$ rudis-http
或者您可以指定地址、分片数(以后将添加更多)
$ rudis-http -n <num_shards> -a <address_to_listen_on>
# to view all commands, do
$ rudis-http --help
服务器将在您指定的端口上监听,默认为 127.0.0.1:6379
。
一旦服务器启动并运行,其服务可以通过 http GET 请求访问。以下是一些支持的请求
GET: <your-url>/GET/<key>
SET: <your-url>/SET/<key>/<value>
响应将以 json 格式。对于 SET,您将得到此命令的状态,如下所示
$ curl 'localhost:6379/set/hello/world'
{"SET": "OK"}
# or if SET's arguments are not correct
$ curl 'localhost:6379/set/hello'
{"SET": "Invalid"}
您也可以发送带有 json 作为键值对的 POST 请求以支持 SET 命令。
$ curl -X POST 'localhost:6379/set' -d '{"hello":"world"}'
{"SET": "OK"}
$ curl -X POST 'localhost:6379/set' -d '{}'
{"SET": "Invalid"}
# for multiple kv pairs
$ curl -X POST 'localhost:6379/set' -d '{"hello":"world", "foo":"bar"}'
{"SET": "OK}
对于 GET,如果匹配,您将得到键值对,如果没有匹配,则得到一个空的 json 对象
$ curl 'localhost:6379/get/hello'
{"hello":"world"}
# if key does not exist
$ curl 'localhost:6379/GET/123'
{}
# if GET's arguments are not correct
$ curl 'localhost:6379/GET'
{"GET": "Invalid"}
其他类型的命令将以一个空的 json 对象响应
待办事项
- 更多 CLI 选项
- 设置参数的 TTL
- 通用客户端,并在其上构建 http 接口
- 生成和备份 .rdb 文件
- 身份验证
已完成待办事项
- 为互斥锁缓存填充
- 支持使用 json 作为参数的 POST 请求
依赖关系
~4–11MB
~112K SLoC