Go LevelDB默认的Get,Put用着很不习惯,稍微封装了下,我的项目结构体比较多,所以默认按value结构体设计,项目中缓存用啥持续纠结,从map->SyncMap->leveldb->ssdb->ledisdb->redis->leveldb研究了一遍,最后还是暂时使用leveldb。
1、代码
package uleveldb
import (
"encoding/json"
"fmt"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/errors"
"github.com/syndtr/goleveldb/leveldb/iterator"
"github.com/syndtr/goleveldb/leveldb/opt"
"github.com/syndtr/goleveldb/leveldb/util"
)
type Uleveldb struct {
DB *leveldb.DB
}
//打开Db
func OpenDb(path string) *Uleveldb {
newdb, err := leveldb.OpenFile(path, nil)
if _, corrupted := err.(*errors.ErrCorrupted); corrupted {
newdb, err = leveldb.RecoverFile(path, nil)
}
if err != nil {
panic(err)
}
uleveldb := Uleveldb{}
uleveldb.DB = newdb
return &uleveldb
}
//释放资源
func (uleveldb *Uleveldb) Close() {
uleveldb.DB.Close()
}
/**
* @description: 存储数据
* @param {*}
* @return {*}
* @param {interface{}} key
* @param {interface{}} value
*/
func (uleveldb *Uleveldb) Put(key string, value interface{}) error {
result, err := json.Marshal(value)
if err != nil {
fmt.Println("error")
return err
}
err = uleveldb.DB.Put([]byte(key), []byte(result), nil)
return err
}
/**
* @description: 读取数据
* @param {*}
* @return {*}
* @param {interface{}} key
* @param {interface{}} value
*/
func (uleveldb *Uleveldb) Get(key interface{}) ([]byte, error) {
return uleveldb.DB.Get([]byte(key.(string)), nil)
}
/**
* @description: 删除数据
* @param {*}
* @return {*}
* @param {string} key
* @param {interface{}} value
*/
func (uleveldb *Uleveldb) Delete(key string) error {
return uleveldb.DB.Delete([]byte(key), nil)
}
/**
* @description: 返回指定当前DB迭代器
* @param {*}
* @return {*}
* @param {string} key
* @param {interface{}} value
*/
func (uleveldb *Uleveldb) NewIterator(slice *util.Range, ro *opt.ReadOptions) iterator.Iterator {
return uleveldb.DB.NewIterator(slice, ro)
}
|
请发表评论