go-redis ZSet有序集合操作 | 青训营

215 阅读1分钟

go-redis ZSet有序集合操作

Zset(sorted set):有序不重复集合,每个元素会关联一个float64类型的值,类似Hashmap中的key-valule,但是这里是member-score。

添加一个值

key表示这个Zset的key,后续需要通过key来找到对应的Zset

func (c cmdable) ZAdd(ctx context.Context, key string, members ...Z)

后面的一个参数需要用到redis库中提供的结构体

type Z struct {
   Score  float64
   Member interface{}
}

因此在使用中一般写成这种形式 rdb.ZAdd(ctx,"key",redis.Z{Member: xxx,Score: xxx}) 或者创造一个Z结构的结构体来传入函数

按照顺序进行查找Member

返回在这个Zset中,排位从start到stop(闭区间)的Member值。stop中使用-1表示取到最后

unc (c cmdable) ZRange(ctx context.Context, key string, start, stop int64) *StringSliceCmd

若想反向取可以使用ZRevRange函数

根据Score来查询Menber

unc (c cmdable) ZRangeByScore(ctx context.Context, key string, opt *ZRangeBy) *StringSliceCmd

这里特别用到了ZRangeBy结构体作为opt参数传入

type ZRangeBy struct {
   Min, Max      string
   Offset, Count int64
}

Min,Max分别表示Score的下限以及上限,Offset表示偏移量(在满足条件的范围,从offset下标处开始取),Count表示查询返回结果的个数。

带Socre值的查询

可以直接在上面提到的两个函数名称后添加WithScores就可以获得带有Score的返回值ZRangeWithScores ZRangeByScoreWithScores

本文仅旨在阐明如何分别获取Zset中Member和Score的值,多余的函数可以查看相关文档进行学习。