2021-02-14 16:18:26 +00:00
|
|
|
package cache
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
2021-02-19 22:20:02 +00:00
|
|
|
"github.com/dgraph-io/badger/v3"
|
2021-02-14 16:18:26 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func (c *Client) Get(bucket string, key string) ([]byte, error) {
|
|
|
|
|
var value []byte
|
2021-02-19 22:20:02 +00:00
|
|
|
|
|
|
|
|
if err := c.db.View(func(txn *badger.Txn) error {
|
|
|
|
|
// get key
|
|
|
|
|
v, err := txn.Get([]byte(fmt.Sprintf("%s_%s", bucket, key)))
|
|
|
|
|
if err != nil {
|
|
|
|
|
return fmt.Errorf("%v: %v: get error: %w", bucket, key, err)
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// validate value
|
|
|
|
|
if v.IsDeletedOrExpired() {
|
|
|
|
|
return fmt.Errorf("%v: %v: get: key does not exist", bucket, key)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// read value
|
|
|
|
|
err = v.Value(func(val []byte) error {
|
|
|
|
|
value = val
|
|
|
|
|
return nil
|
|
|
|
|
})
|
2021-02-14 16:18:26 +00:00
|
|
|
if err != nil {
|
2021-02-19 22:20:02 +00:00
|
|
|
return fmt.Errorf("%v: %v: get: value error: %w", bucket, key, err)
|
2021-02-14 16:18:26 +00:00
|
|
|
}
|
2021-02-19 22:20:02 +00:00
|
|
|
|
2021-02-14 16:18:26 +00:00
|
|
|
return nil
|
|
|
|
|
}); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return value, nil
|
|
|
|
|
}
|