SugarDB是一个高度可配置的、分布式的内存数据存储和缓存系统,使用Go语言实现。 它可以作为Go库导入,也可以作为独立服务运行。
SugarDB旨在提供丰富的数据结构和函数来操作内存中的数据。这些数据结构包括但不限于: 列表、集合、有序集合、哈希表等,更多功能即将推出。
SugarDB提供了持久化层以提高可靠性。可以使用仅追加文件(AOF)和快照来将数据持久化到磁盘, 以便在意外关机时进行恢复。默认配置会启用 hybrid persistence(RDB 基线 + 增量 AOF 压缩链),减少 AOF 膨胀; 服务端默认启动时优先尝试恢复 AOF / hybrid 持久化工件,若未发现 AOF 工件则回退到快照恢复路径。
复制是SugarDB的核心功能,使用RAFT算法实现,允许您创建容错的SugarDB节点集群以提高可靠性。 如果您不需要复制集群,您可以始终在独立模式下运行SugarDB,拥有功能完备的单节点。
SugarDB不仅旨在成为一个服务器,还要能够导入到现有项目中,以增强这些项目的SugarDB功能, 这种能力一直在不断开发和改进中。
SugarDB提供的功能包括:
当前代码已实现并通过测试的核心模块:
安装SugarDB:go get github.com/echovault/sugardb/sugardb
以下是将SugarDB作为嵌入式库使用的示例。 您可以使用符合人体工程学的API访问所有SugarDB命令。
func main() {
server, err := sugardb.NewSugarDB()
if err != nil {
log.Fatal(err)
}
_, _, _ = server.Set("key", "Hello, SugarDB!", sugardb.SETOptions{})
v, _ := server.Get("key")
fmt.Println(v) // Hello, SugarDB!
// (可选):在此SugarDB实例上监听TCP连接
server.Start()
}
嵌入式SugarDB实例仍然可以成为集群的一部分,从API触发的更改将在整个集群中保持一致。
通过homebrew安装,运行:
brew tap echovault/sugardbbrew install echovault/echovault/sugardb安装完成后,您可以使用以下命令运行服务器:
sugardb --bind-addr=localhost --data-dir="path/to/persistence/directory"
docker pull echovault/sugardb
完整的标签列表可以在这里找到。
docker pull ghcr.io/echovault/sugardb
完整的标签列表可以在这里找到。
您可以通过点击发布标签并下载适合您系统的二进制文件来下载二进制文件。
编译当前架构的可执行文件:
make build
我们提供了完整的多架构编译支持,使用优化的编译参数:
编译单个架构:
make build-linux-amd64 # Linux x86_64
make build-linux-arm64 # Linux ARM64
make build-linux-arm # Linux ARM
make build-windows-amd64 # Windows x86_64
make build-windows-arm64 # Windows ARM64
make build-darwin-amd64 # macOS x86_64
make build-darwin-arm64 # macOS ARM64 (Apple Silicon)
make build-freebsd-amd64 # FreeBSD x86_64
批量编译:
make build-common # 编译常用平台 (Linux, Windows, macOS)
make build-all # 编译所有支持的架构
编译信息和工具:
make info # 显示构建信息(版本、时间、提交等)
make clean # 清理构建文件
make help # 显示所有可用的编译选项
-trimpath -ldflags "-s -w -extldflags '-static'" 进行编译优化bin/ 目录编译后的文件将保存在项目的 bin/ 目录中,文件名格式为 sugardb-{操作系统}-{架构}。
SugarDB使用RESP协议,这使其与现有的Redis客户端兼容。
要与Redis比较命令性能,可以运行基准测试:
make benchmark
前提条件:
brew install redis 运行Redis服务器和基准测试脚本brew tap echovault/sugardb & brew install echovault/echovault/sugardb 运行SugarDB客户端-服务器基准测试脚本选项:
make benchmark use_local_server=true 在您的本地SugarDB客户端-服务器上运行make benchmark commands=ping,set,get... 在指定命令上运行基准测试脚本
当前分支在 standalone 模式 下的持久化链路已经不是“只有快照”这么简单,而是三层协同:
DATA_DIR/snapshots/<unix-millis>/dump.rdbDATA_DIR/aof/log.aofDATA_DIR/aof/preamble.rdb 作为 RDB 基线,再叠加 DATA_DIR/aof/log.aof当前恢复顺序与源码行为一致:
--restore-aof=true 且存在 AOF / hybrid 产物(如 aof/preamble.rdb、aof/log.aof),优先从 AOF / hybrid 恢复;--restore-snapshot=true,则回退到最新 snapshot;--restore-aof 与 --restore-snapshot 当前默认都为 true。常用持久化命令:
SAVE:同步生成 / 刷新 RDB 快照BGSAVE [SCHEDULE]:后台生成 / 刷新 RDB 快照LASTSAVE:查看最近一次 snapshot 时间戳(毫秒)REWRITEAOF:同步重写 append-only / hybrid 基线BGREWRITEAOF:后台重写 append-only / hybrid 基线推荐的 standalone 备份集:
snapshots/manifest.bin 与最新 snapshots/<ts>/dump.rdbaof/ 目录(尤其是 preamble.rdb 与 log.aof)推荐的 冷备份流程:
BGSAVE;BGREWRITEAOF;DATA_DIR/snapshots/ 与 DATA_DIR/aof/;--data-dir。详细文档:
/docs/persistence/snapshot/docs/persistence/append-only/docs/persistence/backup-and-restore/docs/persistence/operations-runbook
说明:以下命令清单中,ACL / Admin / Connection / Generic / Hash / List / PubSub / Set / Sorted Set / String / Stream / Transactions / JSON / GEO / TimeSeries / Search / Vector 为当前分支已实现能力。
当前分支已实现常用 Bitmap 命令;底层仍复用 string 存储,与 Redis 一样对外表现为 string key。
当前分支已实现
PFADD / PFCOUNT / PFMERGE命令面;实现以单节点小规模正确性优先,并未复刻 Redis 内核的概率结构编码。
当前已实现第二梯队增强:适合单节点、小规模 queue / event log / consumer group 场景;已补齐
XINFO / XACKDEL / XDELEX / XSETID,但仍未覆盖更深的 Redis 8.x stream 内核语义。
当前已实现第二梯队:
MULTI / EXEC / DISCARD / WATCH / UNWATCH,并已补齐 AOF 中MULTI ... EXEC事务包裹;仍未覆盖 cluster / raft 下更深 Redis 8.x 事务语义。
当前实现覆盖本节命令;JSONPath 目前对齐单节点基础子集:root / field / array index / negative index。
当前实现覆盖本节命令,面向单节点、小规模 GEO 检索与半径 / 盒选搜索场景。