package xredis import ( "context" "encoding/json" "fmt" "reflect" "strconv" "strings" "time" "github.com/go-redis/redis/v8" "github.com/go-redsync/redsync/v4" "github.com/go-redsync/redsync/v4/redis/goredis/v8" "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/constant" ) var rdb *redis.Client var rsync *redsync.Redsync func init() { host := constant.REDIS_HOST port := constant.REDIS_PORT auth := constant.REDIS_AUTH index := 0 if constant.REDIS_DB != "" { indexDb := constant.REDIS_DB index, _ = strconv.Atoi(indexDb) } rdb = redis.NewClient(&redis.Options{ Addr: fmt.Sprintf("%v:%v", host, port), Password: auth, DB: index, // use default DB }) res := rdb.Ping(context.TODO()) if res.Err() != nil { panic("redis not found") } pool := goredis.NewPool(rdb) rsync = redsync.New(pool) } func Set(key string, value interface{}, timeout time.Duration) error { valueOf := reflect.ValueOf(value) typeName := strings.ToLower(valueOf.Type().Name()) var newValue interface{} if typeName == "string" || typeName == "int" || typeName == "int64" || typeName == "float64" { newValue = value } else { mBytes, err := json.Marshal(value) if err != nil { return err } newValue = string(mBytes) } err := rdb.Set(rdb.Context(), key, newValue, timeout*time.Second).Err() return err } func Get(key string) string { value, err := rdb.Get(rdb.Context(), key).Result() if err != nil { return "" } return value } func GetBytes(key string) ([]byte, error) { return rdb.Get(rdb.Context(), key).Bytes() } func Remove(key string) error { return rdb.Del(rdb.Context(), key).Err() }