「GoCN酷Go推荐」情人节别人都有 rose?别担心,今天你有 rosedb

1.前言

通常,每当我们用到数据库时候,都会想起redis、memcache、mysql等等,这些数据库都是独立于我们的服务进程,需要单独的管理。

本文推荐一个内嵌的,简单的k-v 数据库rosedb,不需要单独管理数据库,直接import导入,就可以直接使用,非常方便。

rosedb 使用Golang实现,支持多种数据结构,包含 String、List、Hash、Set、Sorted Set,接口名称风格和 Redis 类似,如果你对 Redis 比较熟悉,那么使用起来会毫无违和感。

2.rosedb 特性

  • 支持丰富的数据结构:字符串、列表、哈希表、集合、有序集合。

  • 内嵌使用简单至极,无需任何安装部署(import "github.com/roseduan/rosedb")。

  • 低延迟、高吞吐(具体请见英文 README 的 Benchmark)。

  • 不同数据类型的操作可以完全并行。

  • 支持客户端命令行操作。

  • 支持过期时间。

  • String 数据类型支持前缀和范围扫描。

  • 支持简单的事务操作,ACID 特性。

  • 数据文件 merge 可手动停止。

3.rosedb 支持命令

String

  • Set、SetNx、Get、GetSet、Append、StrLen、StrExists、StrRem、PrefixScan、RangeScan、Expire、Persist、TTL List

  • LPush、RPush、LPop、RPop、LIndex、LRem、LInsert、LSet、LTrim、LRange、LLen Hash

  • HSet、HSetNx、HGet、HGetAll、HDel、HExists、HLen、HKeys、HValues Set

  • SAdd、SPop、SIsMember、SRandMember、SRem、SMove、SCard、SMembers、SUnion、SDiff Zset

  • ZAdd、ZScore、ZCard、ZRank、ZRevRank、ZIncrBy、ZRange、ZRevRange、ZRem、ZGetByRank、ZRevGetByRank、ZScoreRange、ZRevScoreRange

4.命令行使用举例

1.按照protobuf及相关插件;并gen_pb_go.sh 生成相关pb文件

$ go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
$ sh gen_pb_go.sh

2.切换目录到 rosedb/cmd/server

$ go run main.go 
  _____     ____     _____   ______   _____    ____
 |  __ \   / __ \   / ____| |  ____| |  __ \  |  _ \
 | |__) | | |  | | | (___   | |__    | |  | | | |_) |
 |  _  /  | |  | |  \___ \  |  __|   | |  | | |  _ <
 | | \ \  | |__| |  ____) | | |____  | |__| | | |_) |
 |_|  \_\  \____/  |_____/  |______| |_____/  |____/

2022/02/11 16:03:29 no config set, using the default config.
2022/02/11 16:03:29 no dir path set, using the os tmp dir.
2022/02/11 16:03:29 rosedb is running, ready to accept connections.
2022/02/11 16:03:29 grpc server serve in addr 127.0.0.1:5300

3.打开一个新的窗口,切换目录到 rosedb/cmd/cli

$ go run main.go 
127.0.0.1:5200>
127.0.0.1:5200>set name zhangsan
OK
127.0.0.1:5200>get name
zhangsan
127.0.0.1:5200>
127.0.0.1:5200>hset zhangsan math 100
(integer) 0 
127.0.0.1:5200>hset zhangsan english 80
(integer) 0 
127.0.0.1:5200>hkeys zhangsan
1) math
2) english
127.0.0.1:5200>hvals zhangsan
1) 100
2) 80
127.0.0.1:5200>

5.直接内嵌使用举例

package main

import (
 "fmt"
 "log"

 "github.com/roseduan/rosedb"
)

func main() {
 config := rosedb.DefaultConfig()
 db, err := rosedb.Open(config)
 if err != nil {
  log.Fatal(err)
 }

 var s string
 db.Set("str", "hello world")
 db.Get("str", &s)
 fmt.Printf("str = %s \n\n", s)

 db.LPush("mylist", "apple", "pear", "banana")
 length := db.LLen("mylist")
 fmt.Printf("len(mylist) = %v \n", length)
 li, _ := db.LRange("mylist", 0, 3)
 fmt.Printf("mylist = %v \n\n", li)

 db.HSet("zhangsan", "math", 100)
 db.HSet("zhangsan", "english", 90)
 keys := db.HKeys("zhangsan")
 fmt.Printf("zhangsan.keys = %v \n", keys)
 vals := db.HVals("zhangsan")
 fmt.Printf("zhangsan.vals = %v \n\n", vals)

 defer db.Close()
}

执行,控制台输出如下:

$ go run test.go 
str = hello world 

len(mylist) = 21 
mylist = [[98 97 110 97 110 97] [112 101 97 114] [97 112 112 108 101] [98 97 110 97 110 97]] 

zhangsan.keys = [math english] 
zhangsan.vals = [[100] [90]]

6.总结

rosedb 是一个内嵌的,简单的k-v 数据库rosedb,直接import导入就可以直接使用;同时它类似redis命令行,和api的使用方式,非常方便;如果你也想直接嵌入代码使用,不妨试试看,相信一定会喜欢上的!

参考资料

  • https://github.com/flower-corp/rosedb/blob/main/README-CN.md

《酷Go推荐》招募:

各位Gopher同学,最近我们社区打算推出一个类似GoCN每日新闻的新栏目《酷Go推荐》,主要是每周推荐一个库或者好的项目,然后写一点这个库使用方法或者优点之类的,这样可以真正的帮助到大家能够学习到

新的库,并且知道怎么用。

大概规则和每日新闻类似,如果报名人多的话每个人一个月轮到一次,欢迎大家报名!戳「阅读原文」,即可报名

扫码也可以加入 GoCN 的大家族哟~

5f8e39cada298737cbdf4240984d6de4.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值