/
kvs.go
38 lines (32 loc) · 888 Bytes
/
kvs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package store
import (
"context"
"fmt"
"time"
"github.com/budougumi0617/go_todo_app/config"
"github.com/budougumi0617/go_todo_app/entity"
"github.com/go-redis/redis/v8"
)
func NewKVS(ctx context.Context, cfg *config.Config) (*KVS, error) {
cli := redis.NewClient(&redis.Options{
Addr: fmt.Sprintf("%s:%d", cfg.RedisHost, cfg.RedisPort),
})
if err := cli.Ping(ctx).Err(); err != nil {
return nil, err
}
return &KVS{Cli: cli}, nil
}
type KVS struct {
Cli *redis.Client
}
func (k *KVS) Save(ctx context.Context, key string, userID entity.UserID) error {
id := int64(userID)
return k.Cli.Set(ctx, key, id, 30*time.Minute).Err()
}
func (k *KVS) Load(ctx context.Context, key string) (entity.UserID, error) {
id, err := k.Cli.Get(ctx, key).Int64()
if err != nil {
return 0, fmt.Errorf("failed to get by %q: %w", key, ErrNotFound)
}
return entity.UserID(id), nil
}