go-ayo/common을 gocommon으로 분리
This commit is contained in:
70
redis.go
Normal file
70
redis.go
Normal file
@ -0,0 +1,70 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/url"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
"github.com/go-redis/redis/v8"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
type Authinfo struct {
|
||||
Accid primitive.ObjectID `bson:"_id,omitempty" json:"_id,omitempty"`
|
||||
ServiceCode string `bson:"code" json:"code"`
|
||||
Platform string
|
||||
Uid string
|
||||
Token string
|
||||
Sk primitive.ObjectID
|
||||
RefreshToken string `bson:"refresh_token,omitempty" json:"refresh_token,omitempty"`
|
||||
Expired primitive.DateTime `bson:"_ts" json:"_ts"`
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user