Files
gocommon/redis.go

65 lines
1.2 KiB
Go
Raw Normal View History

package gocommon
2023-05-24 15:10:15 +09:00
import (
"context"
"os"
"strconv"
"github.com/go-redis/redis/v8"
)
func newRedisClient(uri string, dbidxoffset int) *redis.Client {
option, err := redis.ParseURL(uri)
if err != nil {
return nil
}
option.DB += dbidxoffset
return redis.NewClient(option)
}
func NewRedisClient(uri string) (*redis.Client, error) {
if !*devflag {
return newRedisClient(uri, 0), nil
2023-05-24 15:10:15 +09:00
}
option, err := redis.ParseURL(uri)
if err != nil {
return nil, err
}
zero := option
zero.DB = 0
rdb := redis.NewClient(zero)
defer rdb.Close()
2023-05-24 15:10:15 +09:00
hostname, _ := os.Hostname()
myidx, _ := rdb.HGet(context.Background(), "private_db", hostname).Result()
if len(myidx) > 0 {
offset, _ := strconv.Atoi(myidx)
option.DB += offset
return redis.NewClient(option), nil
2023-05-24 15:10:15 +09:00
}
alldbs, err := rdb.HGetAll(context.Background(), "private_db").Result()
if err != nil {
return nil, err
}
maxidx := 0
for _, prvdb := range alldbs {
actualidx, _ := strconv.Atoi(prvdb)
if maxidx < actualidx {
maxidx = actualidx
}
}
newidx := maxidx + 1
_, err = rdb.HSet(context.Background(), "private_db", hostname, newidx).Result()
if err != nil {
return nil, err
}
option.DB += newidx
return redis.NewClient(option), nil
2023-05-24 15:10:15 +09:00
}