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.
369 lines
8.6 KiB
369 lines
8.6 KiB
package rediscontroll
|
|
|
|
import (
|
|
"main_exam_server/common"
|
|
|
|
"github.com/go-redis/redis/v8"
|
|
)
|
|
|
|
/**
|
|
*列表(list)类型操作
|
|
*/
|
|
/*
|
|
添加元素
|
|
@setName 集合名称
|
|
@setVal 要添加的值
|
|
*/
|
|
func SetAdd(rdb *redis.Client, setName string, setVal ...interface{}) (int64, bool) {
|
|
// rdb := RedisInit()
|
|
val, err := rdb.SAdd(ctx, setName, setVal).Result()
|
|
if err != nil {
|
|
return 0, false
|
|
}
|
|
return val, true
|
|
}
|
|
|
|
/*
|
|
*随机取一个元素
|
|
@setName 集合名称
|
|
*/
|
|
func SetPop(rdb *redis.Client, setName string) (string, bool) {
|
|
// rdb := RedisInit()
|
|
val, err := rdb.SPop(ctx, setName).Result()
|
|
if err != nil {
|
|
return "", false
|
|
}
|
|
return val, true
|
|
}
|
|
|
|
/*
|
|
删除集合里指定的值
|
|
@setName 集合名称
|
|
@setVal 要添加的值
|
|
*/
|
|
func SetRem(rdb *redis.Client, setName string, setVal ...interface{}) bool {
|
|
// rdb := RedisInit()
|
|
_, err := rdb.SRem(ctx, setName, setVal).Result()
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
/*
|
|
获取集合所有成员
|
|
@setName 集合名称
|
|
call back
|
|
集合成员,是否获取成功
|
|
*/
|
|
func GetSetMembers(rdb *redis.Client, setName string) (map[int]interface{}, bool) {
|
|
valMap := common.MapOutint()
|
|
// rdb := RedisInit()
|
|
listMap, err := rdb.SMembers(ctx, setName).Result()
|
|
if err != nil {
|
|
return valMap, false
|
|
}
|
|
for index, val := range listMap {
|
|
valMap[index] = val
|
|
}
|
|
return valMap, true
|
|
}
|
|
|
|
/*
|
|
判断元素是否在集合中
|
|
@setName 集合名称
|
|
call back
|
|
*/
|
|
func SetIsMember(rdb *redis.Client, setName string, setVal interface{}) bool {
|
|
// rdb := RedisInit()
|
|
exists, err := rdb.SIsMember(ctx, setName, setVal).Result()
|
|
if err != nil {
|
|
return false
|
|
}
|
|
if exists {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
/*
|
|
获取集合元素个数
|
|
@setName 集合名称
|
|
*/
|
|
func GetSetCard(rdb *redis.Client, setName string) int64 {
|
|
// rdb := RedisInit()
|
|
total, err := rdb.SCard(ctx, setName).Result()
|
|
if err != nil {
|
|
return 0
|
|
}
|
|
return total
|
|
}
|
|
|
|
/*
|
|
-1差集,0,并集,1交集
|
|
@setName 集合名称
|
|
*/
|
|
func SetDiffOrUnionOrInter(rdb *redis.Client, setType int8, firstSetName string, setName string) (map[int]interface{}, bool, int) {
|
|
sendValMap := common.MapOutint()
|
|
|
|
isTrue := false
|
|
// rdb := RedisInit()
|
|
switch setType {
|
|
case -1:
|
|
//并集
|
|
Diff, err := rdb.SDiff(ctx, firstSetName, setName).Result()
|
|
if err != nil {
|
|
isTrue = false
|
|
}
|
|
isTrue = true
|
|
for index, val := range Diff {
|
|
sendValMap[index] = val
|
|
}
|
|
return sendValMap, isTrue, 1
|
|
case 1:
|
|
inter, err := rdb.SInter(ctx, firstSetName, setName).Result()
|
|
if err != nil {
|
|
isTrue = false
|
|
}
|
|
isTrue = true
|
|
for index, val := range inter {
|
|
sendValMap[index] = val
|
|
}
|
|
// fmt.Printf("===>%v\n", inter)
|
|
return sendValMap, isTrue, 2
|
|
default:
|
|
//并集
|
|
unionAry, err := rdb.SUnion(ctx, firstSetName, setName).Result()
|
|
if err != nil {
|
|
isTrue = false
|
|
}
|
|
isTrue = true
|
|
for index, val := range unionAry {
|
|
sendValMap[index] = val
|
|
}
|
|
return sendValMap, isTrue, 3
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
有序集合(zset)类型
|
|
*/
|
|
/*
|
|
有序集合添加元素
|
|
@sortedName 集合名称
|
|
@sortedVal Score:集合权重,Member:值
|
|
*/
|
|
func SortedAdd(rdb *redis.Client, sortedName string, sortedVal map[float64]interface{}) {
|
|
// rdb := RedisInit()
|
|
|
|
for index, val := range sortedVal {
|
|
rdb.ZAdd(ctx, sortedName, &redis.Z{
|
|
Score: float64(index),
|
|
Member: val,
|
|
})
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
增加元素分值
|
|
@sortedName 集合名称
|
|
@sortedScore 集合权重
|
|
@sortedMember 成员
|
|
*/
|
|
func SortedIncrBy(rdb *redis.Client, sortedName string, sortedScore float64, sortedMember string) bool {
|
|
// rdb := RedisInit()
|
|
_, err := rdb.ZIncrBy(ctx, sortedName, sortedScore, sortedMember).Result()
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
/*
|
|
返回有序集中,指定区间内的成员
|
|
@sortedName 集合名称
|
|
@startIndex 集合开始下标
|
|
@stopIndex 集合结束下标
|
|
*/
|
|
func SortedRange(rdb *redis.Client, sortedName string, startIndex, stopIndex int64) bool {
|
|
// rdb := RedisInit()
|
|
err := rdb.ZRange(ctx, sortedName, startIndex, stopIndex).Err()
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return false
|
|
}
|
|
|
|
/*
|
|
返回有序集中,指定区间内的成员。其中成员的位置按分数值递减(从大到小)来排列。
|
|
@sortedName 集合名称
|
|
@startIndex 集合开始下标
|
|
@stopIndex 集合结束下标
|
|
*/
|
|
func SortedRevRange(rdb *redis.Client, sortedName string, startIndex, stopIndex int64) (map[int]interface{}, bool) {
|
|
valMap := common.MapOutint()
|
|
// rdb := RedisInit()
|
|
valList, err := rdb.ZRevRange(ctx, sortedName, startIndex, stopIndex).Result()
|
|
if err != nil {
|
|
return valMap, false
|
|
}
|
|
|
|
for index, val := range valList {
|
|
valMap[index] = val
|
|
}
|
|
return valMap, true
|
|
}
|
|
|
|
/*
|
|
返回有序集中,指定区间内的成员。其中成员的位置按分数值递减(从大到小)来排列。(带分值)
|
|
@sortedName 集合名称
|
|
@startIndex 集合开始下标
|
|
@stopIndex 集合结束下标
|
|
*/
|
|
func SortedRangeWithScores(rdb *redis.Client, sortedName string, startIndex, stopIndex int64) (map[int]interface{}, bool) {
|
|
valMap := common.MapOutint()
|
|
// rdb := RedisInit()
|
|
valList, err := rdb.ZRevRangeWithScores(ctx, sortedName, startIndex, stopIndex).Result()
|
|
if err != nil {
|
|
return valMap, false
|
|
}
|
|
|
|
for index, val := range valList {
|
|
valMap[index] = val
|
|
}
|
|
return valMap, true
|
|
}
|
|
|
|
/*
|
|
返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。
|
|
@sortedName 集合名称
|
|
@sorterMinVal 集合最小下标
|
|
@sorterMaxVal 集合最大下标
|
|
*/
|
|
func SortedRangeByScore(rdb *redis.Client, sortedName string, sorterMinVal, sorterMaxVal string) (map[int]interface{}, bool) {
|
|
valMap := common.MapOutint()
|
|
// rdb := RedisInit()
|
|
valList, err := rdb.ZRangeByScore(ctx, sortedName, &redis.ZRangeBy{
|
|
Min: sorterMinVal,
|
|
Max: sorterMaxVal,
|
|
}).Result()
|
|
if err != nil {
|
|
return valMap, false
|
|
}
|
|
|
|
for index, val := range valList {
|
|
valMap[index] = val
|
|
}
|
|
return valMap, true
|
|
}
|
|
|
|
/*
|
|
返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。
|
|
@sortedName 集合名称
|
|
@sorterMinVal 集合最小下标
|
|
@sorterMaxVal 集合最大下标
|
|
*/
|
|
func SortedRevRangeByScore(rdb *redis.Client, sortedName string, sorterMinVal, sorterMaxVal string) (map[int]interface{}, bool) {
|
|
valMap := common.MapOutint()
|
|
// rdb := RedisInit()
|
|
valList, err := rdb.ZRevRangeByScore(ctx, sortedName, &redis.ZRangeBy{
|
|
Min: sorterMinVal,
|
|
Max: sorterMaxVal,
|
|
}).Result()
|
|
if err != nil {
|
|
return valMap, false
|
|
}
|
|
|
|
for index, val := range valList {
|
|
valMap[index] = val
|
|
}
|
|
return valMap, true
|
|
}
|
|
|
|
/*
|
|
命令用于计算集合中元素的数量。
|
|
@sortedName 集合名称
|
|
*/
|
|
func SortedCard(rdb *redis.Client, sortedName string) int64 {
|
|
// rdb := RedisInit()
|
|
count, err := rdb.ZCard(ctx, sortedName).Result()
|
|
if err != nil {
|
|
return 0
|
|
}
|
|
return count
|
|
}
|
|
|
|
/*
|
|
计算有序集合中指定分数区间的成员数量。
|
|
@sortedName 集合名称
|
|
@startIndex 集合开始下标
|
|
@stopIndex 集合结束下标
|
|
*/
|
|
func SortedCount(rdb *redis.Client, sortedName, startIndex, stopIndex string) int64 {
|
|
// rdb := RedisInit()
|
|
count, err := rdb.ZCount(ctx, sortedName, startIndex, stopIndex).Result()
|
|
if err != nil {
|
|
return 0
|
|
}
|
|
return count
|
|
}
|
|
|
|
/*
|
|
返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil 。
|
|
@sortedName 集合名称
|
|
@sortedMember 集合成员
|
|
*/
|
|
func SortedScore(rdb *redis.Client, sortedName, sortedMember string) float64 {
|
|
// rdb := RedisInit()
|
|
count, err := rdb.ZScore(ctx, sortedName, sortedMember).Result()
|
|
if err != nil {
|
|
return 0
|
|
}
|
|
return count
|
|
}
|
|
|
|
/*
|
|
移除有序集中的一个或多个成员,不存在的成员将被忽略。
|
|
@sortedName 集合名称
|
|
@sortedMember 集合成员
|
|
*/
|
|
func SortedRem(rdb *redis.Client, sortedName, sortedMember string) int64 {
|
|
// rdb := RedisInit()
|
|
count, err := rdb.ZRem(ctx, sortedName, sortedMember).Result()
|
|
if err != nil {
|
|
return 0
|
|
}
|
|
return count
|
|
}
|
|
|
|
/*
|
|
移除有序集中,指定排名(rank)区间内的所有成员
|
|
@sortedName 集合名称
|
|
@startIndex 集合开始下标
|
|
@stopIndex 集合结束下标
|
|
*/
|
|
func SortedRemRangeByRank(rdb *redis.Client, sortedName string, startIndex, stopIndex int64) int64 {
|
|
// rdb := RedisInit()
|
|
count, err := rdb.ZRemRangeByRank(ctx, sortedName, startIndex, stopIndex).Result()
|
|
if err != nil {
|
|
return 0
|
|
}
|
|
return count
|
|
}
|
|
|
|
/*
|
|
移除有序集中,指定分数(score)区间内的所有成员。
|
|
@sortedName 集合名称
|
|
@startIndex 集合开始下标
|
|
@stopIndex 集合结束下标
|
|
*/
|
|
func SortedRemRangeByScore(rdb *redis.Client, sortedName, startIndex, stopIndex string) int64 {
|
|
// rdb := RedisInit()
|
|
count, err := rdb.ZRemRangeByScore(ctx, sortedName, startIndex, stopIndex).Result()
|
|
if err != nil {
|
|
return 0
|
|
}
|
|
return count
|
|
}
|
|
|