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
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
|
|
}
|
|
|