rosedb 是一个稳定、高性能、快速、内嵌的 k-v 存储引擎,支持多种数据结构,包含 String
、List
、Hash
、Set
、Sorted Set
,接口名称风格和 Redis 类似。
rosedb 基于简单的 bitcask 模型,数据文件布局类似 LSM Tree 中的 WAL 日志,纯 Golang
实现,易于理解和使用。
我们的愿景是打造一个高效的 k-v 存储引擎,你可以给我们提任何建议,也请给我们一个 star ✨ 哦,非常感谢!
- 支持丰富的数据结构:字符串、列表、哈希表、集合、有序集合。
- 内嵌使用简单至极,无需任何安装部署(
import "github.com/roseduan/rosedb"
)。 - 低延迟、高吞吐(具体请见英文 README 的 Benchmark)。
- 不同数据类型的操作可以完全并行。
- 支持客户端命令行操作。
- 支持过期时间。
String
数据类型支持前缀和范围扫描。- 支持简单的事务操作,ACID 特性。
- 数据文件 merge 可手动停止。
使用前请先安装protobuf
在根目录运行 bash gen_pb_go.sh
切换目录到 rosedb/cmd/server
运行 server 目录下的 main.go
打开一个新的窗口,切换目录到 rosedb/cmd/cli
运行目录下的 main.go
也可以直接使用 redis-cli:
在项目中导入 rosedb:
import "github.com/roseduan/rosedb"
然后打开一个数据库并执行相应的操作:
package main
import (
"github.com/roseduan/rosedb"
"log"
)
func main() {
config := rosedb.DefaultConfig()
db, err := rosedb.Open(config)
if err != nil {
log.Fatal(err)
}
// 别忘记关闭数据库哦!
defer db.Close()
//...
}
docker build -t="rosedb:v1.2.9" .
docker run --name=rosedb -itd -p 5200:5200 rosedb:v1.2.9
docker exec -it rosedb sh
$ rosedb-cli
127.0.0.1:5200>set hello rosedb
OK
127.0.0.1:5200>get hello
rosedb
- Set
- SetNx
- Get
- GetSet
- Append
- StrLen
- StrExists
- StrRem
- PrefixScan
- RangeScan
- Expire
- Persist
- TTL
- LPush
- RPush
- LPop
- RPop
- LIndex
- LRem
- LInsert
- LSet
- LTrim
- LRange
- LLen
- LKeyExists
- LValExists
- HSet
- HSetNx
- HGet
- HGetAll
- HDel
- HExists
- HLen
- HKeys
- HVals
- SAdd
- SPop
- SIsMember
- SRandMember
- SRem
- SMove
- SCard
- SMembers
- SUnion
- SDiff
- ZAdd
- ZScore
- ZCard
- ZRank
- ZRevRank
- ZIncrBy
- ZRange
- ZRangeWithScores
- ZRevRange
- ZRevRangeWithScores
- ZRem
- ZGetByRank
- ZRevGetByRank
- ZScoreRange
- ZRevScoreRange
可以参考这里:待办。
我在 B 站录制了这个项目的视频,你可以跟着视频来学习这个项目。
做为一个个人开源项目,rosedb 还有很多不完善的地方,期待你提出宝贵的意见和建议,感兴趣的话也非常欢迎参与到 rosedb 的开发中!
感谢你的参与,你可以给这个项目:
- 提 bug 或者 issue
- 关于代码,性能各方面的建议
- 参与进来,完善功能
完整的步骤及规范,请参考:CONTRIBUTING
欢迎加我微信,拉你进 rosedb 项目交流群,和大牛一起交流学习。
添加时请备注【Github】哦。 |
rosedb 根据 MIT License 许可证授权,有关完整许可证文本,请参阅 LICENSE。