package util import ( "fmt" "io" "sync" "time" "xiaoniaokuaiyan.com/xiaoniao/config" "gopkg.in/redis.v2" ) var redisInstance *redis.Client var redisOnce sync.Once func GetRedis() *redis.Client { redisOnce.Do(func() { var ( dsec = config.IniConf.Section("database") host = dsec.Key("redis.host").Value() port = dsec.Key("redis.port").Value() ) var redisOptions *redis.Options = &redis.Options{ Addr: fmt.Sprintf("%s:%s", host, port), //Addr: "101.201.196.166:6379", } redisInstance = redis.NewTCPClient(redisOptions) }) var password = config.IniConf.Section("database").Key("redis.password").Value() //password:="xn9659$" cmdStatus := redisInstance.Auth(password) if cmdStatus.Err() == io.EOF { //fmt.Println(cmdStatus.Err()) redisInstance.Ping() redisInstance.Auth(password) } return redisInstance } func GetRedisValue(key string) (string, error) { client := GetRedis() client.Select(12) strCmd := client.Get(key) if err := strCmd.Err(); err != nil { return "", err } return strCmd.Val(), nil } func SetRedisValue(key, val string, period int64) (bool, error) { client := GetRedis() client.Select(12) statusCmd := client.Set(key, val) if err := statusCmd.Err(); err != nil { return false, err } if int64(period) > 0 { client.Expire(key, time.Duration(period)) } return true, nil } func SetLock(key string) error { client := GetRedis() cmd := client.SetNX(key, "1") if !cmd.Val() || cmd.Err() != nil { //log.Println(cmd.Err()) return fmt.Errorf("redis error") } client.Expire(key, time.Second*3) return nil } func DelLock(key string) { client := GetRedis() client.Del(key) }