Initial cloud-services repo - gateway service + pkg modules
This commit is contained in:
79
pkg/redis/pool.go
Normal file
79
pkg/redis/pool.go
Normal file
@@ -0,0 +1,79 @@
|
||||
package redis
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"fiskerinc.com/modules/logger"
|
||||
"fiskerinc.com/modules/utils/envtool"
|
||||
|
||||
"github.com/gomodule/redigo/redis"
|
||||
"github.com/pkg/errors"
|
||||
redigotrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/gomodule/redigo"
|
||||
)
|
||||
|
||||
// connection vars
|
||||
var (
|
||||
host = envtool.GetEnv("REDIS_HOST", "localhost")
|
||||
port = envtool.GetEnv("REDIS_PORT", "6379")
|
||||
password = envtool.GetEnv("REDIS_PASSWORD", "REPLACE_ME")
|
||||
addr = fmt.Sprintf("%v:%v", host, port)
|
||||
)
|
||||
|
||||
func UpdateRedisConnection(redisHost string, redisPort string, redisPassword string) {
|
||||
host = redisHost
|
||||
port = redisPort
|
||||
password = redisPassword
|
||||
addr = fmt.Sprintf("%v:%v", host, port)
|
||||
|
||||
}
|
||||
|
||||
// Pool provides redis connections
|
||||
type Pool interface {
|
||||
Get() redis.Conn
|
||||
Stats() redis.PoolStats
|
||||
ActiveCount() int
|
||||
}
|
||||
|
||||
func NewPool() Pool {
|
||||
return &redis.Pool{
|
||||
IdleTimeout: time.Millisecond * time.Duration(envtool.GetEnvInt("REDIS_IDLETIMEOUT_MS", 1000)),
|
||||
MaxIdle: envtool.GetEnvInt("REDIS_MAXIDLECONN", 10),
|
||||
MaxActive: envtool.GetEnvInt("REDIS_MAXACTIVECONN", 10),
|
||||
MaxConnLifetime: time.Millisecond * time.Duration(envtool.GetEnvInt("REDIS_MAXCONNLIFETIME_MS", 1000)),
|
||||
Wait: (envtool.GetEnvInt("REDIS_WAITGETCONN", 0) == 1),
|
||||
Dial: func() (redis.Conn, error) {
|
||||
conn, err := redigotrace.Dial("tcp", addr, redis.DialKeepAlive(time.Minute*time.Duration(envtool.GetEnvInt("REDIS_KEEPALIVE_MINS", 10))))
|
||||
if password == "" {
|
||||
return conn, errors.WithStack(err)
|
||||
}
|
||||
if err != nil {
|
||||
logger.Error().Err(errors.WithStack(err)).Send()
|
||||
return nil, err
|
||||
}
|
||||
if _, err := conn.Do("AUTH", password); err != nil {
|
||||
conn.Close()
|
||||
logger.Error().Err(errors.WithStack(err)).Send()
|
||||
return nil, err
|
||||
}
|
||||
return conn, nil
|
||||
},
|
||||
TestOnBorrow: func(c redis.Conn, t time.Time) error {
|
||||
_, err := c.Do("PING")
|
||||
return err
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
type Conn interface {
|
||||
Do(string, ...interface{}) (interface{}, error)
|
||||
DoWithTimeout(time.Duration, string, ...interface{}) (interface{}, error)
|
||||
|
||||
Receive() (interface{}, error)
|
||||
ReceiveWithTimeout(time.Duration) (interface{}, error)
|
||||
|
||||
Send(string, ...interface{}) error
|
||||
Err() error
|
||||
Close() error
|
||||
Flush() error
|
||||
}
|
||||
Reference in New Issue
Block a user