知行学院重新架构Golang版后台
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.

213 lines
5.2 KiB

package rediscontroll
import (
"fmt"
"main_exam_server/loges"
"time"
"github.com/go-redis/redis/v8"
)
/**
*字符串(string)类型操作
*/
/*
Set():设置
@keyName 键名
@keyVal 键值
@timeVal 过期时间
*/
func SetString(rdb *redis.Client, keyName string, keyVal string, timeVal time.Duration) bool {
// rdb := RedisInit()
err := rdb.Set(ctx, keyName, keyVal, timeVal).Err()
if err != nil {
errStr := fmt.Sprintf("%v键设置值%v错误:%v", keyName, keyVal, err)
loges.LongInit(errStr)
return false
}
return true
}
/*
SetEX():设置并指定过期时间
不管该key是否已经存在缓存中直接覆盖
@keyName 键名
@keyVal 键值
@timeVal 过期时间
*/
func SetStringEx(rdb *redis.Client, keyName string, keyVal string, timeVal time.Duration) bool {
// rdb := RedisInit()
err := rdb.SetEX(ctx, keyName, keyVal, timeVal).Err()
if err != nil {
errStr := fmt.Sprintf("%v键设置值%v错误:%v", keyName, keyVal, err)
loges.LongInit(errStr)
return false
}
return true
}
/*
SetEX():设置并指定过期时间
不管该key是否已经存在缓存中直接覆盖
@keyName 键名
@keyVal 键值
@timeVal 过期时间
call back -1 错误;1:设置失败;2:甚至成功
*/
func SetStringNX(rdb *redis.Client, keyName string, keyVal string, timeVal time.Duration) int {
// rdb := RedisInit()
res, err := rdb.SetNX(ctx, keyName, keyVal, timeVal).Result()
if err != nil {
errStr := fmt.Sprintf("%v键设置值%v错误:%v", keyName, keyVal, err)
loges.LongInit(errStr)
return -1
}
if res {
return 2
} else {
return 1
}
}
/*
获取字符串键值
@keyName 键名
*/
func GetString(rdb *redis.Client, keyName string) (val string, istrue bool) {
// rdb := RedisInit()
val, err := rdb.Get(ctx, keyName).Result()
if err == redis.Nil {
errStr := fmt.Sprintf("%v键不存在:%v", keyName, err)
loges.LongInit(errStr)
return "", false
} else if err != nil {
errStr := fmt.Sprintf("%v键获取错误:%v", keyName, err)
loges.LongInit(errStr)
return "", false
} else {
return val, true
}
}
/*
字符串截取
@keyName 键名
@startSubscript 下标索引的开始位置
@endtSubscript 下标索引的结束位置(不是要截取的长度)
*/
func StringInterception(rdb *redis.Client, keyName string, startSubscript, endtSubscript int64) (val string, istrue bool) {
// rdb := RedisInit()
valstr, err := rdb.GetRange(ctx, keyName, startSubscript, endtSubscript).Result()
if err != nil {
errStr := fmt.Sprintf("%v键截取错误:%v", keyName, err)
loges.LongInit(errStr)
return "", false
}
return valstr, true
}
/*
string 加一操作
@keyName 键名
*/
func StringIncr(rdb *redis.Client, keyName string) (val int64, istrue bool) {
// rdb := RedisInit()
valstr, err := rdb.Incr(ctx, keyName).Result()
if err != nil {
errStr := fmt.Sprintf("%v键加一操作错误:%v", keyName, err)
loges.LongInit(errStr)
return 0, false
}
return valstr, true
}
/*
string 按指定步长增加
@keyName 键名
@istrue 步长
*/
func StringIncrBy(rdb *redis.Client, keyName string, stepval int64) (val int64, istrue bool) {
// rdb := RedisInit()
valstr, err := rdb.IncrBy(ctx, keyName, stepval).Result()
if err != nil {
errStr := fmt.Sprintf("%v键加指定步长操作错误:%v", keyName, err)
loges.LongInit(errStr)
return 0, false
}
return valstr, true
}
/*
string 减一操作
@keyName 键名
*/
func StringDecr(rdb *redis.Client, keyName string) (val int64, istrue bool) {
// rdb := RedisInit()
valstr, err := rdb.Decr(ctx, keyName).Result()
if err != nil {
errStr := fmt.Sprintf("%v键减一操作错误:%v", keyName, err)
loges.LongInit(errStr)
return 0, false
}
return valstr, true
}
/*
string 按指定步长减少
@keyName 键名
@istrue 步长
*/
func StringDecrBy(rdb *redis.Client, keyName string, stepval int64) (val int64, istrue bool) {
// rdb := RedisInit()
valstr, err := rdb.DecrBy(ctx, keyName, stepval).Result()
if err != nil {
errStr := fmt.Sprintf("%v键减指定步长操作错误:%v", keyName, err)
loges.LongInit(errStr)
return 0, false
}
return valstr, true
}
/*
往字符串后面追加元素,返回值是字符串和总长度
@keyName 键名
@keyVal 键值
call back 值,值长度,是否操作成功
*/
func StringAppend(rdb *redis.Client, keyName, keyVal string) (string, int64, bool) {
//判断键是否存在
if ExistsIsTrue(rdb, keyName) != true {
return "", 0, false
}
// rdb := RedisInit()
lenght, err := rdb.Append(ctx, keyName, keyVal).Result() //追加
if err != nil {
errStr := fmt.Sprintf("%v键追加值操作错误:%v", keyName, err)
loges.LongInit(errStr)
return "", 0, false
}
val, isTrue := GetString(rdb, keyName) //获取值
if isTrue != true {
return "", 0, false
}
return val, lenght, isTrue
}
/*
获取字符串长度
@keyName 键名
*/
func GetStrLen(rdb *redis.Client, keyName string) (int64, bool) {
//判断键是否存在
if ExistsIsTrue(rdb, keyName) != true {
return 0, false
}
// rdb := RedisInit()
lenght, err := rdb.StrLen(ctx, keyName).Result() //获取字符串长度
if err != nil {
errStr := fmt.Sprintf("%v键获取长度错误:%v", keyName, err)
loges.LongInit(errStr)
return 0, false
}
return lenght, true
}