package redis_client import ( "code.gitea.io/gitea/modules/labelmsg" "fmt" "github.com/gomodule/redigo/redis" "math" "strconv" "time" ) func Setex(key, value string, timeout time.Duration) (bool, error) { redisClient := labelmsg.Get() defer redisClient.Close() seconds := int(math.Floor(timeout.Seconds())) reply, err := redisClient.Do("SETEX", key, seconds, value) if err != nil { return false, err } if reply != "OK" { return false, nil } return true, nil } func Setnx(key, value string, timeout time.Duration) (bool, error) { redisClient := labelmsg.Get() defer redisClient.Close() seconds := int(math.Floor(timeout.Seconds())) reply, err := redisClient.Do("SET", key, value, "NX", "EX", seconds) if err != nil { return false, err } if reply != "OK" { return false, nil } return true, nil } func Get(key string) (string, error) { redisClient := labelmsg.Get() defer redisClient.Close() reply, err := redisClient.Do("GET", key) if err != nil { return "", err } if reply == nil { return "", err } s, _ := redis.String(reply, nil) return s, nil } func Del(key string) (int, error) { redisClient := labelmsg.Get() defer redisClient.Close() reply, err := redisClient.Do("DEL", key) if err != nil { return 0, err } if reply == nil { return 0, err } s, _ := redis.Int(reply, nil) return s, nil } func TTL(key string) (int, error) { redisClient := labelmsg.Get() defer redisClient.Close() reply, err := redisClient.Do("TTL", key) if err != nil { return 0, err } n, _ := strconv.Atoi(fmt.Sprint(reply)) return n, nil } func IncrBy(key string, n int64) (int64, error) { redisClient := labelmsg.Get() defer redisClient.Close() reply, err := redisClient.Do("INCRBY", key, n) if err != nil { return 0, err } i, err := strconv.ParseInt(fmt.Sprint(reply), 10, 64) return i, nil } func Expire(key string, expireTime time.Duration) error { redisClient := labelmsg.Get() defer redisClient.Close() _, err := redisClient.Do("EXPIRE", key, int64(expireTime.Seconds())) if err != nil { return err } return nil } //GetInt64 get redis value by Get(key) //and then parse the value to int64 //return {isExist(bool)} {value(int64)} {error(error)} func GetInt64(key string) (bool, int64, error) { str, err := Get(key) if err != nil { return false, 0, err } if str == "" { return false, 0, nil } i, err := strconv.ParseInt(str, 10, 64) if err != nil { return false, 0, err } return true, i, nil } func ZAdd(key, value string, score float64) error { redisClient := labelmsg.Get() defer redisClient.Close() _, err := redisClient.Do("ZADD", key, score, value) if err != nil { return err } return nil } func ZRangeByScore(key string, min, max float64) ([]string, error) { redisClient := labelmsg.Get() defer redisClient.Close() reply, err := redisClient.Do("ZRANGEBYSCORE", key, min, max) if err != nil { return nil, err } if reply == nil { return nil, err } s, _ := redis.Strings(reply, nil) return s, nil } func ZRemRangeByScore(key string, min, max float64) error { redisClient := labelmsg.Get() defer redisClient.Close() _, err := redisClient.Do("ZREMRANGEBYSCORE", key, min, max) if err != nil { return err } return nil }