1. package storage
  1. //kv 存储引擎实现
  1. import (
  1.     "github.com/cznic/kv"
  1.     "io"
  1. )
  1. //kv 存储结构体 并且实现了storage存储接口
  1. type kvStorage struct {
  1.     db *kv.DB
  1. }
  1. //打开存储引擎 即:引擎map集合对应的value 值 函数的实现 key为path
  1. //返回存储引擎接口 和 err 代表文件打开错误
  1. func openKVStorage(path string) (Storage, error) {
  1.     options := &kv.Options{}
  1.     db, errOpen := kv.Open(path, options)
  1.     if errOpen != nil {
  1.         var errCreate error
  1.         db, errCreate = kv.Create(path, options)
  1.         if errCreate != nil {
  1.             return &kvStorage{db}, errCreate
  1.         }
  1.     }
  1.     return &kvStorage{db}, nil
  1. }

  1. func (s *kvStorage) WALName() string {
  1.     return s.db.WALName()
  1. }

  1. func (s *kvStorage) Set(k []byte, v []byte) error {
  1.     return s.db.Set(k, v)
  1. }

  1. func (s *kvStorage) Get(k []byte) ([]byte, error) {
  1.     return s.db.Get(nil, k)
  1. }

  1. func (s *kvStorage) Delete(k []byte) error {
  1.     return s.db.Delete(k)
  1. }

  1. func (s *kvStorage) ForEach(fn func(k, v []byte) error) error {
  1.     iter, err := s.db.SeekFirst()
  1.     if err == io.EOF {
  1.         return nil
  1.     } else if err != nil {
  1.         return err
  1.     }
  1.     for {
  1.         key, value, err := iter.Next()
  1.         if err == io.EOF {
  1.             break
  1.         } else if err != nil {
  1.             return err
  1.         }
  1.         if err := fn(key, value); err != nil {
  1.             return err
  1.         }
  1.     }
  1.     return nil
  1. }

  1. func (s *kvStorage) Close() error {
  1.     return s.db.Close()
  1. }

kv_storage.go的更多相关文章

随机推荐

  1. 移动web前端开发时注意事项(转)

    在智能手机横行的时代,作为一个web前端,不会编写移动web界面,的确是件悲催的事情.当公司准备做一个微信的微网站时,作为一个多年经验的web前端码农,我迷茫了,真心不知道从何下手. 接下来就是搜一堆 ...

  2. SQL中内连接和外连接的问题!

    本文系转载,版权归原作者所有. 如表      -------------------------------------------------      table1 | table2 |    ...

  3. js 读取xml文件

    读取xml文件 [原创 2007-6-20 17:35:37]     字号:大 中 小 js中读取xml文件,简单的例子: <html><head><script> ...

  4. Sec site list

    Seclist:  英语:  http://seclists.org/  http://www.securityfocus.com/  http://www.exploit-db.com/  http ...

  5. 使用Glide以及OkHttp集成

    1.glide的使用: 添加依赖: compile 'com.github.bumptech.glide:glide:3.7.0' 调用代码: ImageView imageView = (Image ...

  6. pymongo "ServerSelectionTimeoutError: No servers found yet" 错误的解决

    系统转移过程中,擅自把aptitude安装的mongoengine换成了pip安装,系统启动以后,报这个错误 报错提示: File "/usr/local/lib/python2.7/dis ...

  7. Android之淘宝商品列表长按遮罩效果

    先来看看淘宝.唯品会长按商品的效果,以及简单Demo的效果:        首先分析一下场景: 长按条目时,弹出遮罩的效果遮挡在原来的条目布局上: 页面滑动或点击其他的条目,上一个正在遮罩的条目遮罩消 ...

  8. SOFA 源码分析 — 连接管理器

    前言 RPC 框架需要维护客户端和服务端的连接,通常是一个客户端对应多个服务端,而客户端看到的是接口,并不是服务端的地址,服务端地址对于客户端来讲是透明的. 那么,如何实现这样一个 RPC 框架的网络 ...

  9. Tomcat配置多实例:centos和winserver环境

    CentOS:配置多Tomcat:     1.下载:# wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-6/v6.0.44/bin/apache- ...

  10. 为什么Python编程被国家教育如此重视?请开始你的表演!

    高考新宠 在高考更改之前,提起编程,人们可能更多的会想起c语言之类的. 然而,高考更始之后,Python这门编程说话一夜之间传进了千家万户. 现实上,在IEEE(美国电气电子工程师学会出书的旗舰杂志) ...