增加leveldb支持
This commit is contained in:
parent
99c261ca91
commit
1de0cb8203
7
go.mod
7
go.mod
|
|
@ -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
|
||||
)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
package leveldb
|
||||
|
||||
type Config struct {
|
||||
Path string
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue