package common import ( "context" "net/url" "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, dbidx int) (*redis.Client, error) { if !*Devflag { return newRedisClient(uri, dbidx), nil } rdb := newRedisClient(uri, 0) devUrl, _ := url.Parse(uri) hostname, _ := os.Hostname() myidx, _ := rdb.HGet(context.Background(), "private_db", hostname).Result() if len(myidx) > 0 { devUrl.Path = "/" + myidx return newRedisClient(devUrl.String(), dbidx), nil } alldbs, err := rdb.HGetAll(context.Background(), "private_db").Result() if err != nil { rdb.Close() 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 } devUrl.Path = "/" + strconv.Itoa(newidx) return newRedisClient(devUrl.String(), dbidx), nil }