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的更多相关文章
随机推荐
- rails中migration数据库后测试不通过的问题
rails项目中由于后期需求变化,需要在products数据库中增加一个字段来满足多国家商品的分类: rails g migration add_locale_to_products locale:s ...
- JVM学习--(四)垃圾回收算法
我们都知道java语言与C语言最大的区别就是内存自动回收,那么JVM是怎么控制内存回收的,这篇文章将介绍JVM垃圾回收的几种算法,从而了解内存回收的基本原理. stop the world 在介绍垃圾 ...
- 在Redis Sentinel环境下,jedis该如何配置
在Redis主从复制架构中,如果master出现了故障,则需要人工将slave提升为master,同时,通知应用侧更新master的地址.这样方式比较低效,对应用侧影响较大. 为了解决这个问题,Red ...
- use ECharts with Angular 2 and TypeScript
https://stackoverflow.com/questions/38158318/is-it-possible-to-use-echarts-baidu-with-angular-2-and- ...
- vue实现淘宝商品详情页属性选择功能
方法一是自己想出来的,方法二来自忘记哪里看到的了 不知道是不是你要的效果: 方法一:利用input[type="radio"] css代码: input { display: no ...
- ElasticSearch本地调测环境构建
ElasicSearch版本:6.0.0:https://github.com/elastic/elasticsearch.git 1:安装JVM(JVM1.8以上) 2:安装gradle(3.3以上 ...
- PAT1126:Eulerian Path
1126. Eulerian Path (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue In grap ...
- springMVC引入Validation详解
本文简单介绍如何引入validation的步骤,如何通过自定义validation减少代码量,提高生产力.特别提及:非基本类型属性的valid,GET方法的处理,validation错误信息的统一re ...
- 应用服务器性能优化 之 消息队列(MQ:Message Queue)
一,消息队列基本概念 借用百科的一句话:消息队列就是在消息的传输过程中,保存消息的容器. 从图-1和图-2对比,可以很清晰的明白,消息队列服务器,是位于应用服务器和数据库服务器之间的一个服务器.消息队 ...
- 拇指玩」制作的「谷歌安装器」app
作者:匿名用户链接:https://www.zhihu.com/question/57468448/answer/153000587来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...