You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
2.9 KiB
124 lines
2.9 KiB
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
|
|
}
|
|
|