• Go入门笔记36-一个LevelDB的Go封装


    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)
    }
    
    
    本博客是个人工作中记录,遇到问题可以互相探讨,没有遇到的问题可能没有时间去特意研究,勿扰。
    另外建了几个QQ技术群:
    2、全栈技术群:616945527,加群口令abc123
    2、硬件嵌入式开发: 75764412
    3、Go语言交流群:9924600

    闲置域名www.nsxz.com出售(等宽等高字符四字域名)。
  • 相关阅读:
    使用MyBatis生成插件
    关联源码及日志
    下载依赖
    框架简介及基本使用
    注解的本质 及 反射读取属性值
    元注解
    广告系统学习笔记(一)
    Nginx学习笔记(三)
    Nginx学习笔记(二)
    Nginx学习笔记(一)
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/15227146.html
Copyright © 2020-2023  润新知