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.
50 lines
1.1 KiB
50 lines
1.1 KiB
2 years ago
|
package objstorage
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"github.com/go-redis/redis/v8"
|
||
|
"log"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type KV interface {
|
||
|
Get(ctx context.Context, key string) (string, error)
|
||
|
Set(ctx context.Context, key string, val string, expiration time.Duration) error
|
||
|
Del(ctx context.Context, key string) error
|
||
|
IsNotFound(err error) bool
|
||
|
}
|
||
|
|
||
|
func NewKV() KV {
|
||
|
rdb := redis.NewClient(&redis.Options{
|
||
|
Addr: "",
|
||
|
Username: "",
|
||
|
Password: "",
|
||
|
})
|
||
|
return &redisImpl{
|
||
|
rdb: rdb,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type redisImpl struct {
|
||
|
rdb *redis.Client
|
||
|
}
|
||
|
|
||
|
func (r *redisImpl) Del(ctx context.Context, key string) error {
|
||
|
log.Println("redis del", key)
|
||
|
return r.rdb.Del(ctx, key).Err()
|
||
|
}
|
||
|
|
||
|
func (r *redisImpl) Get(ctx context.Context, key string) (string, error) {
|
||
|
log.Println("redis get", key)
|
||
|
return r.rdb.Get(ctx, key).Result()
|
||
|
}
|
||
|
|
||
|
func (r *redisImpl) Set(ctx context.Context, key string, val string, expiration time.Duration) error {
|
||
|
log.Println("redis set", key, val, expiration.String())
|
||
|
return r.rdb.Set(ctx, key, val, expiration).Err()
|
||
|
}
|
||
|
|
||
|
func (r *redisImpl) IsNotFound(err error) bool {
|
||
|
return err == redis.Nil
|
||
|
}
|