113 lines
1.7 KiB
Go
113 lines
1.7 KiB
Go
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) {
|
|
config = conf
|
|
if config == nil {
|
|
config = &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 *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
|
|
}
|