简介
nutsdb是一个完全由 Go 编写的简单、快速、可嵌入的持久化存储。nutsdb与我们之前介绍过的buntdb有些类似,但是支持List、Set、Sorted Set这些数据结构。
快速使用
先安装:
$ go get github.com/xujiajun/nutsdb
后使用:
package main
import (
"fmt"
"log"
"github.com/xujiajun/nutsdb"
)
func main() {
opt := nutsdb.DefaultOptions
opt.Dir = "./nutsdb"
db, err := nutsdb.Open(opt)
if err != nil {
log.Fatal(err)
}
defer db.Close()
err = db.Update(func(tx *nutsdb.Tx) error {
key := []byte("name")
val := []byte("dj")
if err := tx.Put("", key, val, 0); err != nil {
return err
}
return nil
})
if err != nil {
log.Fatal(err)
}
err = db.View(func(tx *nutsdb.Tx) error {
key := []byte("name")
if e, err := tx.Get("", key); err != nil {
return err
} else {
fmt.Println(string(e.Value))
}
return nil
})
if err != nil {
log.Fatal(err)
}
}
看过前面介绍buntdb文章的小伙伴会发现,nutsdb的简单使用与buntdb非常相似。首先打开数据库nutsdb.Open(),通过选项指定数据库文件存放目录。数据的插入、修改和查找都是包装在一个事务方法中执行的。nutsdb允许同时存在多个读事务。但是有写事务存在时,其他事务不能并发执行。需要修改数据的操作在db.Update()的回调中执行,无副作用的操作在db.View()的回调中执行。上面代码先插入一个键值对,然后读取这个键。
从代码我们可以看出,由于涉及数据库操作,需要大量的错误处理。为了简洁起见,本文后面的代码省略了错误处理,在实际使用中必须加上!
特性
桶
**桶(bucket)**有点像命名空间的概念。在同一个桶中的键不能重复,不同的桶可以包含相同的键。nutsdb提供的更新和查询接口都需要传入桶名,只是我们在最开始的例子中将桶名设置为空字符串了。
func main() {
opt := nutsdb.DefaultOptions
opt.Dir = "./nutsdb"
db, _ := nutsdb.Open(opt)
defer db.Close()
key := []byte("name")
val := []byte("dj")
db.Update(func(tx *nutsdb.Tx) error {
tx.Put("bucket1", key, val, 0)
return nil
})
db.Update(func(tx *nutsdb.Tx) error {
tx.Put("bucket2", key, val, 0)
return nil

本文介绍了Go语言中的nutsdb数据库,包括其安装、基本使用、特性如桶、更新删除、过期时间设置、遍历操作。此外,还详细探讨了nutsdb支持的List、Set和Hash等数据结构及其操作方法,并展示了如何进行数据库备份。
最低0.47元/天 解锁文章
339

被折叠的 条评论
为什么被折叠?



