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的更多相关文章
随机推荐
- 移动web前端开发时注意事项(转)
在智能手机横行的时代,作为一个web前端,不会编写移动web界面,的确是件悲催的事情.当公司准备做一个微信的微网站时,作为一个多年经验的web前端码农,我迷茫了,真心不知道从何下手. 接下来就是搜一堆 ...
- SQL中内连接和外连接的问题!
本文系转载,版权归原作者所有. 如表 ------------------------------------------------- table1 | table2 | ...
- js 读取xml文件
读取xml文件 [原创 2007-6-20 17:35:37] 字号:大 中 小 js中读取xml文件,简单的例子: <html><head><script> ...
- Sec site list
Seclist: 英语: http://seclists.org/ http://www.securityfocus.com/ http://www.exploit-db.com/ http ...
- 使用Glide以及OkHttp集成
1.glide的使用: 添加依赖: compile 'com.github.bumptech.glide:glide:3.7.0' 调用代码: ImageView imageView = (Image ...
- pymongo "ServerSelectionTimeoutError: No servers found yet" 错误的解决
系统转移过程中,擅自把aptitude安装的mongoengine换成了pip安装,系统启动以后,报这个错误 报错提示: File "/usr/local/lib/python2.7/dis ...
- Android之淘宝商品列表长按遮罩效果
先来看看淘宝.唯品会长按商品的效果,以及简单Demo的效果: 首先分析一下场景: 长按条目时,弹出遮罩的效果遮挡在原来的条目布局上: 页面滑动或点击其他的条目,上一个正在遮罩的条目遮罩消 ...
- SOFA 源码分析 — 连接管理器
前言 RPC 框架需要维护客户端和服务端的连接,通常是一个客户端对应多个服务端,而客户端看到的是接口,并不是服务端的地址,服务端地址对于客户端来讲是透明的. 那么,如何实现这样一个 RPC 框架的网络 ...
- Tomcat配置多实例:centos和winserver环境
CentOS:配置多Tomcat: 1.下载:# wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-6/v6.0.44/bin/apache- ...
- 为什么Python编程被国家教育如此重视?请开始你的表演!
高考新宠 在高考更改之前,提起编程,人们可能更多的会想起c语言之类的. 然而,高考更始之后,Python这门编程说话一夜之间传进了千家万户. 现实上,在IEEE(美国电气电子工程师学会出书的旗舰杂志) ...