snippet/leveldb/leveldb.go

112 lines
1.7 KiB
Go
Raw Normal View History

2022-04-14 14:12:57 +00:00
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
}