DiceDB 项目介绍
DiceDB 是一款内存内、实时、响应式的数据库,支持 Redis 和 SQL,专为现代硬件和构建实时应用程序进行优化。即使它仍在开发阶段,但它已经显示出许多值得关注的特点。
早期设计合作伙伴
如果您有兴趣评估 DiceDB 我们非常欢迎您成为我们的早期设计合作伙伴,可以预定时间,随时进行交流。
注意:DiceDB 目前还在开发中,支持的 Redis 命令仅限于子集。所以,请勿在生产环境中使用。不过,您可以随时浏览公开问题并贡献代码,帮助我们加速开发。
如何贡献?
我们有多个代码库可供您贡献。根据您的兴趣,您可以选择一个并在实践中加深对项目的了解。
- 核心数据库功能和引擎 / 技术栈:Go
- DiceDB playground 的后端接口 / 技术栈:Go
- DiceDB playground 的前端 / 技术栈:NextJS
与 Redis 的不同之处
虽然 DiceDB 可以无缝替换 Redis,几乎无需学习曲线,切换不需要修改代码,但它在两个关键方面有所不同:
- DiceDB 是多线程的,并遵循无共享架构。
- DiceDB 支持一个新命令
QWATCH
,允许客户端监听 SQL 查询,并在数据发生变化时实时接收通知。
这使您可以通过简单的 SQL 查询构建真正的实时应用程序,例如排行榜。
快速开始
使用 Docker
使用 Docker 是最简单的开始方式,只需运行以下命令:
$ docker run dicedb/dicedb
上述命令将在本地端口 7379
启动 DiceDB 服务器,您可以通过 DiceDB CLI 和 SDK,甚至是 Redis CLI 和 SDK 进行连接。
多线程模式(实验性)
多线程模式目前正在积极开发中。要启用多线程模式运行服务器,请执行以下步骤:
$ git clone https://github.com/dicedb/dice
$ cd dice
$ go run main.go --enable-multithreading=true
注意: 只有以下命令经过优化可以进行多线程执行:PING、AUTH、SET、GET、GETSET、ABORT
从源码安装 DiceDB 进行开发和贡献
要进行本地开发或从源码运行 DiceDB,您需要以下工具:
- Golang
- 以下任一平台环境:
- 基于 Linux 的环境
- 基于 OSX (Darwin) 的环境
- 基于 Windows 的 WSL
$ git clone https://github.com/dicedb/dice
$ cd dice
$ go run main.go
- 安装 GoLangCI
$ sudo su
$ curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b /bin v1.60.1
实时开发服务器
DiceDB 提供了一个热重载的开发环境,可让您即时查看代码更改。此功能由 Air 提供支持。
安装 Air 的方法如下:
- 如果您使用的是 go 1.22+ 版本:
go install github.com/air-verse/air@latest
- 安装 Air 二进制文件:
curl -sSfL https://raw.githubusercontent.com/air-verse/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
安装完成后,可以通过 air -v
验证安装。
要本地运行实时 DiceDB 服务器:
$ git clone https://github.com/dicedb/dice
$ cd dice
$ DICE_ENV=dev air
DICE_ENV
环境变量用于设置环境,默认情况下为生产环境。dev
用于获取格式化日志和较低的日志级别。
自定义配置的本地设置
默认情况下,DiceDB 将在 /etc/dice/config.toml
中查找配置文件。
$ # 设置配置文件 # 可选但推荐
$ sudo mkdir -p /etc/dice
$ sudo chown root:$USER /etc/dice
$ sudo chmod 775 /etc/dice
$ git clone https://github.com/DiceDB/dice.git
$ cd dice
$ go run main.go -init-config
对于 Windows 用户:
如果使用的是 Windows,建议使用 Windows Subsystem for Linux (WSL) 或 WSL 2 来无缝运行上述命令。
创建一个目录 C:\ProgramData\dice
并运行以下命令生成配置文件:
go run main.go -init-config
为了获得更流畅的体验,强烈建议使用 WSL。
额外的配置选项:
如果想使用其他位置,可以使用 -c
标志指定自定义配置文件路径:
go run main.go -c /path/to/config.toml
如果想将配置文件输出到特定位置,可以使用 -o
标志指定自定义输出路径:
go run main.go -o /path/of/output/dir
设置 CLI
连接 DiceDB 最好的方法是使用 DiceDB CLI,可以通过以下命令安装:
$ pip install dicedb-cli
由于 DiceDB 支持 Redis 方言,您可以使用任何 Redis 客户端和 SDK 连接到它。但如果您计划使用
QWATCH
功能,则需要使用 DiceDB CLI。
运行测试
单元测试和集成测试对于确保 DiceDB 的正确性至关重要。您可以通过环境变量 TEST_FUNC
指定测试函数的名称,并运行 make unittest-one
命令来执行单个单元测试。运行 make unittest
将执行所有单元测试。
执行单个单元测试
$ TEST_FUNC=<测试函数名称> make unittest-one
$ TEST_FUNC=TestByteList make unittest-one
运行所有单元测试
$ make unittest
集成测试则涉及启动 DiceDB 服务器并运行一系列命令以验证预期的终端状态和输出。要执行单个集成测试,您可以将 TEST_FUNC
环境变量设置为测试函数的名称并运行 make test-one
。运行 make test
将执行所有集成测试。
执行单个集成测试
$ TEST_FUNC=<测试函数名称> make test-one
$ TEST_FUNC=TestSet make test-one
运行所有集成测试
$ make test
为 DiceDB 添加更多测试的工作正在进行中,我 们将尽快将Redis 测试套件移植到此代码库,以确保完全兼容性。
运行基准测试
$ go test -test.bench <模式>
$ go test -test.bench BenchmarkListRedis -benchmem
开始开发
要开始为 DiceDB 构建和贡献代码,请参见此代码库中的问题。
文档
我们使用 Astro 框架为 dicedb.io 提供支持。
](https://app.netlify.com/sites/dicedb/deploys) ](https://starlight.astro.build