Files
img-proxy-url-generator/redis/client.go
Ron Rise 85938a2def
Some checks failed
Go Tests / build (1.22.x) (push) Failing after 1m27s
Code re-organization
2025-01-26 18:20:45 -05:00

66 lines
1.1 KiB
Go

package redis
import (
"context"
"fmt"
"github.com/redis/go-redis/v9"
"github.com/siteworxpro/img-proxy-url-generator/config"
"strconv"
)
type Redis struct {
initialized redisStatus
client *redis.Client
}
type redisStatus uint8
const (
redisStatusUninitialized redisStatus = iota
redisStatusInitialized
)
var singleton *Redis
func New(config *config.Config) (*Redis, error) {
if singleton != nil && singleton.initialized == redisStatusUninitialized {
return singleton, nil
}
db, err := strconv.ParseInt(config.Redis.DB, 10, 64)
if err != nil {
db = 0
}
port := config.Redis.Port
if port == "" {
port = "6379"
}
rdb := redis.NewClient(&redis.Options{
Addr: fmt.Sprintf("%s:%s", config.Redis.Host, port),
DB: int(db),
Password: config.Redis.Password,
})
_, err = rdb.Ping(context.Background()).Result()
if err != nil {
return nil, fmt.Errorf("failed to connect to redis: %w", err)
}
singleton = &Redis{
initialized: redisStatusInitialized,
client: rdb,
}
return singleton, nil
}
func (r *Redis) GetClient() *redis.Client {
return r.client
}
func (r *Redis) Close() error {
return r.client.Close()
}