kv_storage.go
package storage
//kv 存储引擎实现
import (
"github.com/cznic/kv"
"io"
)
//kv 存储结构体 并且实现了storage存储接口
type kvStorage struct {
db *kv.DB
}
//打开存储引擎 即:引擎map集合对应的value 值 函数的实现 key为path
//返回存储引擎接口 和 err 代表文件打开错误
func openKVStorage(path string) (Storage, error) {
options := &kv.Options{}
db, errOpen := kv.Open(path, options)
if errOpen != nil {
var errCreate error
db, errCreate = kv.Create(path, options)
if errCreate != nil {
return &kvStorage{db}, errCreate
}
}
return &kvStorage{db}, nil
}
func (s *kvStorage) WALName() string {
return s.db.WALName()
}
func (s *kvStorage) Set(k []byte, v []byte) error {
return s.db.Set(k, v)
}
func (s *kvStorage) Get(k []byte) ([]byte, error) {
return s.db.Get(nil, k)
}
func (s *kvStorage) Delete(k []byte) error {
return s.db.Delete(k)
}
func (s *kvStorage) ForEach(fn func(k, v []byte) error) error {
iter, err := s.db.SeekFirst()
if err == io.EOF {
return nil
} else if err != nil {
return err
}
for {
key, value, err := iter.Next()
if err == io.EOF {
break
} else if err != nil {
return err
}
if err := fn(key, value); err != nil {
return err
}
}
return nil
}
func (s *kvStorage) Close() error {
return s.db.Close()
}
kv_storage.go的更多相关文章
随机推荐
- MASM中3中文本宏的使用与区别
= 宏 格式 : name = exp 其中,exp只能为32位整数值,且用=宏定义的符号名称可以重定义: EQU 宏 格式1:name EQU exp exp为有效整数值,可以重定义: 格式2:na ...
- 浮点数据有损压缩算法 附完整C代码
在几年前的时候在做修图APP算法的时候, 曾经一度想过对3D Lut 预设数据进行压缩, 主要用于提升用户体验. 关于3d lut算法开源的资源也挺多的,就不多做科普了. 有兴趣的朋友,可以去查阅下f ...
- Thread.yield和join方法
参考:http://blog.csdn.net/dabing69221/article/details/17426953 一. Thread.yield( )方法: 使当前线程从执行状态(运行状态)变 ...
- 模拟IC芯片设计开发的流程
模拟IC芯片设计开发的流程 IC的设计,模拟和数字, 还有混合IC, 在设计方法, 注意点, 工具等有明显的区别, 我主要以模拟无线接收IC系统设计为例说明. 一个IC芯片的设计开发大致包括如下步骤. ...
- SQL 经典语句
15题需要再分析.没弄懂 使用scott/tiger用户下的emp表和dept表完成下列练习, 表的结构说明如下 emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hir ...
- iOS9自动布局神器StackView
http://www.jianshu.com/p/767f72b7d754 这篇文章紧跟上边autolayout的一些小技巧,如果你没有看过,不防先看下<你真的会用autolayout吗?> ...
- Nginx 怎么给一台服务器,配置两个域名?详细的解说+截图教程
一. 环境.条件准备 一台云服务器(我的是腾讯的centos7) 至少两个域名.(我的是simuhunluo.xyz和simuhunluo.top.这两个域名之间没有任何关系,我是在阿里 ...
- 如何确保API的安全性
目标: 定义API安全性要求 使用security scheme来应用资源和方法级策略 定义API的自定义security scheme 将OAuth2.0外部供应商策略应用到资源方法 为API定义一 ...
- C++判断字符串是否为空的一个小问题
刚才visual studio下处理一个函数字符串入参,判断入参字符串是否为空有点小问题. 接口函数声明是这样的:SHORT GETWFSINFPINKEYDETAIL(LPCTSTR strKeyN ...
- 原生Feign使用详解
一,简介 Feign使得 Java HTTP 客户端编写更方便.Feign 灵感来源于Retrofit.JAXRS-2.0和WebSocket.Feign最初是为了降低统一绑定Denominator到 ...