参考网址
blog.csdn.net/w_monster/a…
前言
我们都知道,redis是key和5种数据类型之间的映射
key只能是字符串。
value支持5种数据类型:string, list, set, hash, zset
如何操作zset数据结构
func TestRedisZSet(t *testing.T) {
InitTestRedis()
ctx := context.Background()
ls := []*redis.Z{
{Score: 90.0, Member: "one"},
{Score: 80.0, Member: "two"},
{Score: 70.0, Member: "three"},
{Score: 60.0, Member: "four"},
{Score: 50.0, Member: "five"},
}
cli := RedisClient
l1 := redis.Z{
Score: 40,
Member: "six",
}
cli.ZAdd(ctx, "ranking", &l1)
cli.ZAdd(ctx, "ranking", ls...)
println("升序获取到倒数第三-->")
fmt.Println("ZRange:", cli.ZRange(ctx, "ranking", 0, 3).Val())
println("降序获取所有-->")
fmt.Println("ZRevRange:", cli.ZRevRange(ctx, "ranking", 0, -1).Val())
opt := redis.ZRangeBy{
Min: "50",
Max: "90",
Offset: 2,
Count: 3,
}
println("条件查询 获取50-90分数区间,升序找到3个结果,-->")
fmt.Println(cli.ZRangeByScore(ctx, "ranking", &opt).Val())
println("条件查询 获取50-90分数区间,降序找到3个结果,-->")
fmt.Println(cli.ZRevRangeByScore(ctx, "ranking", &opt).Val())
println("条件查询 从小到大,获取0-3名次,-->")
fmt.Println(cli.ZRangeWithScores(ctx, "ranking", 0, 3).Val())
println("条件查询 从大到小,获取所有名次,-->")
fmt.Println(cli.ZRevRangeWithScores(ctx, "ranking", 0, -1).Val())
println("条件查询 获取50-90分数区间,升序找到3个结果集,-->")
fmt.Println(cli.ZRangeByScoreWithScores(ctx, "ranking", &opt).Val())
println("条件查询 获取50-90分数区间,降序找到3个结果集,-->")
fmt.Println(cli.ZRevRangeByScoreWithScores(ctx, "ranking", &opt).Val())
println("获取指定成员5分数,-->")
f := cli.ZScore(ctx, "ranking", "5").Val()
fmt.Println(f)
println("获取指定成员5下标,-->")
fmt.Println(cli.ZRank(ctx, "ranking", "5").Val())
fmt.Println("获取50-80分数区间成员人数,-->")
fmt.Println(cli.ZCount(ctx, "ranking", "50", "80").Val())
println("获取总榜成员人数,-->")
fmt.Println(cli.ZCard(ctx, "ranking").Val())
println("移除不存在的成员,-->")
fmt.Println(cli.ZRem(ctx, "ranking", "c++").Val())
println("移除存在的成员,-->")
fmt.Println(cli.ZRem(ctx, "ranking", "six", "one").Val())
println("打印现存的所有成员-->")
fmt.Println(cli.ZRange(ctx, "ranking", 0, -1).Val())
println("移除下标1-2的成员-->")
fmt.Println(cli.ZRemRangeByRank(ctx, "ranking", 1, 2).Val())
println("打印现存的所有成员-->")
fmt.Println(cli.ZRangeWithScores(ctx, "ranking", 0, -1).Val())
println("移除70-90分间的成员-->")
fmt.Println(cli.ZRemRangeByScore(ctx, "ranking", "70", "90").Val())
println("打印现存的所有成员-->")
fmt.Println(cli.ZRangeWithScores(ctx, "ranking", 0, -1).Val())
}