You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.1 KiB
62 lines
1.1 KiB
package main
|
|
|
|
import "log"
|
|
import "io/ioutil"
|
|
import "github.com/dgraph-io/badger"
|
|
|
|
type KeyValueStore struct {
|
|
db *badger.DB
|
|
}
|
|
|
|
func NewKeyValueStore() *KeyValueStore {
|
|
kv := new(KeyValueStore)
|
|
kv.init()
|
|
return kv
|
|
}
|
|
|
|
func (kv *KeyValueStore) init() {
|
|
dir, err := ioutil.TempDir("", "badger")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
opts := badger.DefaultOptions
|
|
opts.Dir = dir
|
|
opts.ValueDir = dir
|
|
kv.db, err = badger.Open(opts)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func (kv *KeyValueStore) Close() {
|
|
kv.db.Close()
|
|
}
|
|
|
|
func (kv *KeyValueStore) Put(key *string, value *string) error {
|
|
txn := kv.db.NewTransaction(true) // Read-write txn
|
|
err := txn.Set([]byte(*key), []byte(*value))
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
err = txn.Commit(nil)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (kv *KeyValueStore) Get(key *string) (*string, error) {
|
|
txn := kv.db.NewTransaction(true) // Read-write txn
|
|
item, err := txn.Get([]byte(*key))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
val, err := item.ValueCopy(nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
s := string(val)
|
|
return &s, nil
|
|
}
|
|
|