godocdb/storage/leveldb.go

59 lines
1.2 KiB
Go

package storage
import (
"bytes"
"github.com/syndtr/goleveldb/leveldb"
)
// LevelDBStorage 封装LevelDB基础操作
type LevelDBStorage struct {
db *leveldb.DB
}
// NewLevelDBStorage 初始化LevelDB实例
func NewLevelDBStorage(path string) (*LevelDBStorage, error) {
db, err := leveldb.OpenFile(path, nil)
if err != nil {
return nil, err
}
return &LevelDBStorage{db: db}, nil
}
// Put 存储键值对
func (s *LevelDBStorage) Put(key []byte, value []byte) error {
return s.db.Put(key, value, nil)
}
// Get 获取键对应的值
func (s *LevelDBStorage) Get(key []byte) ([]byte, error) {
return s.db.Get(key, nil)
}
// Delete 删除指定键
func (s *LevelDBStorage) Delete(key []byte) error {
return s.db.Delete(key, nil)
}
// Scan 执行范围扫描
func (s *LevelDBStorage) Scan(prefix []byte) (keys [][]byte, values [][]byte, err error) {
iter := s.db.NewIterator(nil, nil)
defer iter.Release()
for iter.Next() {
if bytes.HasPrefix(iter.Key(), prefix) {
keys = append(keys, iter.Key())
values = append(values, iter.Value())
}
}
if err := iter.Error(); err != nil {
return nil, nil, err
}
return keys, values, nil
}
// Close 关闭数据库连接
func (s *LevelDBStorage) Close() {
s.db.Close()
}