package rediscontroll import ( "fmt" "main_exam_server/common" "main_exam_server/loges" "time" "github.com/go-redis/redis/v8" ) /** *键操作 */ //Keys():根据正则获取keys(获取所有的KEY) func GetAllKey(rdb *redis.Client) map[int]interface{} { // rdb := RedisInit() keys, err := rdb.Keys(ctx, "*").Result() if err != nil { errStr := fmt.Sprintf("获取Key错误:%v", err) loges.LongInit(errStr) errAry := common.MapOutint() errAry[0] = -1 return errAry } keyAry := common.MapOutint() for index, value := range keys { keyAry[index] = value } return keyAry } //获取键对应的值类型 func GetKeyType(rdb *redis.Client, keyName string) string { // rdb := RedisInit() vType, err := rdb.Type(ctx, keyName).Result() if err != nil { errStr := fmt.Sprintf("获取%v键类型错误:%v", keyName, err) loges.LongInit(errStr) return "err" } return vType } //删除键 func DelKey(rdb *redis.Client, keyName string) bool { // rdb := RedisInit() _, err := rdb.Del(ctx, keyName).Result() if err != nil { errStr := fmt.Sprintf("删除%v键类型错误:%v", keyName, err) loges.LongInit(errStr) return false } return true } //检查key是否存在 func ExistsIsTrue(rdb *redis.Client, keyName string) bool { // rdb := RedisInit() keyLenght, err := rdb.Exists(ctx, keyName).Result() if err != nil { errStr := fmt.Sprintf("%v键不存在:%v", keyName, err) loges.LongInit(errStr) return false } if keyLenght > 0 { return true } return false } //设置有效期(秒计) func SecondTermOfValidity(rdb *redis.Client, keyName string, timeval time.Duration) bool { // rdb := RedisInit() keyTime, err := rdb.Expire(ctx, keyName, timeval).Result() if err != nil { errStr := fmt.Sprintf("%v键设置错误:%v", keyName, err) loges.LongInit(errStr) return false } if keyTime { return true } return false } //到某个时间点过期 func TimeNode(rdb *redis.Client, keyName string, timeVal time.Time) bool { // rdb := RedisInit() keyTime, err := rdb.ExpireAt(ctx, keyName, timeVal).Result() if err != nil { errStr := fmt.Sprintf("%v键设置错误:%v", keyName, err) loges.LongInit(errStr) return false } if keyTime { return true } return false } //获取键剩余时间由多少秒 func KeyRemainingTimeSecond(rdb *redis.Client, keyName string) time.Duration { // rdb := RedisInit() RemainingKey, err := rdb.TTL(ctx, keyName).Result() if err != nil { errStr := fmt.Sprintf("%v键剩余时间获取错误:%v", keyName, err) loges.LongInit(errStr) return 0 } return RemainingKey } //获取键剩余时间由多少毫秒 func KeyRemainingTimeMilliSecond(rdb *redis.Client, keyName string) time.Duration { // rdb := RedisInit() RemainingKey, err := rdb.PTTL(ctx, keyName).Result() if err != nil { errStr := fmt.Sprintf("%v键剩余时间获取错误:%v", keyName, err) loges.LongInit(errStr) return 0 } return RemainingKey }