zoukankan      html  css  js  c++  java
  • 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出售(等宽等高字符四字域名)。
  • 相关阅读:
    Java魔法堂:类加载器入了个门
    Java魔法堂:类加载机制入了个门
    FFDshow video encoder -CLSID
    在Ubuntu下利用Eclipse调试FFmpeg《转》
    vc/vs开发的应用程序添加dump崩溃日志<转>
    Directshow 采集与FFDshow 冲突
    dshow采集过程
    innosetup 安装前、卸载前判断是否有进程正在运行<转>
    手游加速器:[求助]安卓端 手游变速器,类似光环助手的实现方式是怎样的?
    网易云音乐api资料
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/15227146.html
Copyright © 2011-2022 走看看