增加leveldb支持
This commit is contained in:
parent
99c261ca91
commit
1de0cb8203
7
go.mod
7
go.mod
|
|
@ -5,9 +5,13 @@ go 1.17
|
||||||
require (
|
require (
|
||||||
github.com/eclipse/paho.mqtt.golang v1.2.0
|
github.com/eclipse/paho.mqtt.golang v1.2.0
|
||||||
github.com/gin-gonic/gin v1.7.4
|
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/gomodule/redigo v1.8.5
|
||||||
github.com/hashicorp/consul/api v1.10.1
|
github.com/hashicorp/consul/api v1.10.1
|
||||||
github.com/influxdata/influxdb v1.9.5
|
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
|
go.mongodb.org/mongo-driver v1.7.4
|
||||||
google.golang.org/grpc v1.41.0
|
google.golang.org/grpc v1.41.0
|
||||||
gorm.io/driver/mysql v1.1.2
|
gorm.io/driver/mysql v1.1.2
|
||||||
|
|
@ -18,6 +22,7 @@ require (
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/armon/go-metrics v0.3.3 // indirect
|
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/fatih/color v1.9.0 // indirect
|
||||||
github.com/gin-contrib/sse v0.1.0 // indirect
|
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||||
github.com/go-playground/locales v0.14.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/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
github.com/pkg/errors v0.9.1 // 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/ugorji/go/codec v1.2.6 // indirect
|
||||||
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
|
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
|
||||||
github.com/xdg-go/scram v1.0.2 // 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/genproto v0.0.0-20210903162649-d08c68adba83 // indirect
|
||||||
google.golang.org/protobuf v1.27.1 // indirect
|
google.golang.org/protobuf v1.27.1 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // 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"
|
"math/rand"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
"myschools.me/suguo/snippet/sqlite"
|
"myschools.me/suguo/snippet/sqlite"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -22,22 +23,17 @@ type CBA struct {
|
||||||
|
|
||||||
func TestSqlite(t *testing.T) {
|
func TestSqlite(t *testing.T) {
|
||||||
conf := &sqlite.Config{
|
conf := &sqlite.Config{
|
||||||
DBFile: "tmp1/abc/aaaaa/abc.db",
|
DBFile: "tmp/abc.db",
|
||||||
}
|
}
|
||||||
if err := sqlite.Init(conf); err != nil {
|
if err := sqlite.Init(conf); err != nil {
|
||||||
t.Fatal(err)
|
assert.Nil(t, err)
|
||||||
}
|
}
|
||||||
db, err := sqlite.New()
|
db, err := sqlite.New()
|
||||||
if err != nil {
|
assert.Nil(t, err)
|
||||||
t.Fatal(err)
|
assert.NotNil(t, db)
|
||||||
}
|
|
||||||
|
|
||||||
if db == nil {
|
|
||||||
t.Error("DB nil")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := sqlite.Migrate(&ABC{}, &CBA{}); err != nil {
|
if err := sqlite.Migrate(&ABC{}, &CBA{}); err != nil {
|
||||||
t.Fatal(err)
|
assert.Nil(t, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue