-
Notifications
You must be signed in to change notification settings - Fork 0
/
redis_conn.go
45 lines (37 loc) · 1.17 KB
/
redis_conn.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
39
40
41
42
43
44
45
// Package rediskit helps to interact with redis storage backend
package rediskit
import (
"context"
"fmt"
"log"
"strconv"
"github.com/adipurnama/go-toolkit/db"
goredis "github.com/go-redis/redis/v8"
predis "github.com/pinpoint-apm/pinpoint-go-agent/plugin/goredisv8"
"github.com/pkg/errors"
)
// NewRedisConnection returns new redis client
// based on db Options.
func NewRedisConnection(option *db.Option) (*goredis.Client, error) {
opts := goredis.Options{
Addr: fmt.Sprintf("%s:%d", option.Host, option.Port),
Password: option.Password,
DialTimeout: option.ConnectTimeout,
MinIdleConns: option.ConnectionOption.MaxIdle,
PoolSize: option.ConnectionOption.MaxOpen,
MaxConnAge: option.ConnectionOption.MaxLifetime,
PoolTimeout: option.MaxLifetime,
}
dbID, err := strconv.Atoi(option.DatabaseName)
if err == nil {
opts.DB = dbID
}
rClient := goredis.NewClient(&opts)
rClient.AddHook(predis.NewHook(&opts))
_, err = rClient.Ping(context.Background()).Result()
if err != nil {
return nil, errors.Wrap(err, "rediskit: failed to initiate redis PING")
}
log.Println("successfully connected to redis", opts.Addr)
return rClient, nil
}