增加leveldb支持

This commit is contained in:
suguo.yao 2022-04-14 22:12:57 +08:00
parent 99c261ca91
commit 1de0cb8203
4 changed files with 129 additions and 10 deletions

7
go.mod
View File

@ -5,9 +5,13 @@ go 1.17
require (
github.com/eclipse/paho.mqtt.golang v1.2.0
github.com/gin-gonic/gin v1.7.4
github.com/gofrs/uuid v3.3.0+incompatible
github.com/gomodule/redigo v1.8.5
github.com/hashicorp/consul/api v1.10.1
github.com/influxdata/influxdb v1.9.5
github.com/sirupsen/logrus v1.7.0
github.com/stretchr/testify v1.7.0
github.com/syndtr/goleveldb v1.0.0
go.mongodb.org/mongo-driver v1.7.4
google.golang.org/grpc v1.41.0
gorm.io/driver/mysql v1.1.2
@ -18,6 +22,7 @@ require (
require (
github.com/armon/go-metrics v0.3.3 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fatih/color v1.9.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-playground/locales v0.14.0 // indirect
@ -47,6 +52,7 @@ require (
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/ugorji/go/codec v1.2.6 // indirect
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
github.com/xdg-go/scram v1.0.2 // indirect
@ -60,4 +66,5 @@ require (
google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83 // indirect
google.golang.org/protobuf v1.27.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
)

5
leveldb/config.go Normal file
View File

@ -0,0 +1,5 @@
package leveldb
type Config struct {
Path string
}

111
leveldb/leveldb.go Normal file
View File

@ -0,0 +1,111 @@
package leveldb
import (
"errors"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/opt"
)
var _db *leveldb.DB
var config *Config
func Init(conf *Config) {
if conf == nil {
conf = &Config{
Path: "./",
}
}
}
func New() (*leveldb.DB, error) {
if _db != nil {
return _db, nil
}
db, err := leveldb.OpenFile(config.Path, nil)
if err != nil {
return nil, err
}
_db = db
return _db, nil
}
func Close() {
if _db != nil {
_db.Close()
}
_db = nil
}
func Get(key, reqid *string) (*[]byte, error) {
db, err := New()
if err != nil {
return nil, err
}
if db == nil {
return nil, errors.New("leveldb is nil")
}
ret, err := db.Has([]byte(*key), &opt.ReadOptions{
DontFillCache: false,
Strict: 0,
})
if err != nil {
return nil, errors.New("key检查异常")
}
if !ret {
return nil, errors.New("key不存在")
}
val, err := db.Get([]byte(*key), nil)
if err != nil {
return nil, err
}
if len(val) == 0 {
return nil, errors.New("key empty")
}
return &val, nil
}
func Put(key *string, payload *[]byte) error {
db, err := New()
if err != nil {
return err
}
if db == nil {
return errors.New("leveldb is busy now")
}
if err := db.Put([]byte(*key), *payload, nil); err != nil {
return err
}
return nil
}
func Delete(key *string) error {
db, err := New()
if err != nil {
return err
}
if db == nil {
return errors.New("leveldb is busy now")
}
ret, err := db.Has([]byte(*key), &opt.ReadOptions{
DontFillCache: false,
Strict: 0,
})
if err != nil {
return err
}
if !ret {
return nil
}
if err := db.Delete([]byte(*key), nil); err != nil {
return err
}
return nil
}

View File

@ -5,6 +5,7 @@ import (
"math/rand"
"testing"
"github.com/stretchr/testify/assert"
"myschools.me/suguo/snippet/sqlite"
)
@ -22,22 +23,17 @@ type CBA struct {
func TestSqlite(t *testing.T) {
conf := &sqlite.Config{
DBFile: "tmp1/abc/aaaaa/abc.db",
DBFile: "tmp/abc.db",
}
if err := sqlite.Init(conf); err != nil {
t.Fatal(err)
assert.Nil(t, err)
}
db, err := sqlite.New()
if err != nil {
t.Fatal(err)
}
if db == nil {
t.Error("DB nil")
}
assert.Nil(t, err)
assert.NotNil(t, db)
if err := sqlite.Migrate(&ABC{}, &CBA{}); err != nil {
t.Fatal(err)
assert.Nil(t, err)
}
}