#redis-server #http-interface #redis #http-server #http #server

bin+lib rudis-http

一个具有 HTTP 接口的迷你 Redis 服务器

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 数据库接口

MIT 许可证

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