Redis——》数据类型:zset(有序集合)

本文介绍了Redis有序集合ZSet的基本概念,包括其作为已排序字符串集合的特性、应用场景(如排行榜和社交需求)、底层使用ziplist和skiplist结构,以及详细的操作示例,如添加、删除、修改、查询和计算等。重点讲解了如何实现排序以及示例代码展示。
摘要由CSDN通过智能技术生成

推荐链接:
    总结——》【Java】
    总结——》【Mysql】
    总结——》【Redis】
    总结——》【Spring】
    总结——》【SpringBoot】
    总结——》【MyBatis、MyBatis-Plus】


相关链接:
    Redis——》数据类型
    Redis——》数据类型:string(字符串)
    Redis——》数据类型:hash(哈希)
    Redis——》数据类型:list(列表)
    Redis——》数据类型:set(集合)
    Redis——》数据类型:zset(有序集合)
    Redis——》数据类型:bitmap

一、简介

已排序的字符串集合,同时元素不能重复
每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

二、应用场景

排行榜,社交需求(如用户点赞)

三、底层结构

ziplist(压缩列表)、skiplist(跳跃表)

四、操作示例

(1)增

语法示例描述
zadd key score1 member1 [score2 member2]zadd k1 1 a 2 b向有序集合添加一个或多个成员,或者更新已存在成员的分数

(2)删

语法示例描述
zrem key member [member …]zrem k1 a b移除有序集合中的一个或多个成员
zremrangebylex key min maxzremrangebylex k1 0 1移除有序集合中给定的字典区间的所有成员
zremrangebyrank key start stopzremrangebyrank k1 0 1移除有序集合中给定的排名区间的所有成员
zremrangebyscore key min maxzremrangebyscore k1 0 10移除有序集合中给定的分数区间的所有成员

(3)改

见增

(4)查

语法示例描述
zcard keyzcard k1获取有序集合的成员数
zrange key start stop [WITHSCORES]zrange k1 0 1通过索引区间返回有序集合成指定区间内的成员
zrangebylex key min max [LIMIT offset count]zrangebylex k1 0 1通过字典区间返回有序集合的成员
zrangebyscore key min max [WITHSCORES] [LIMIT]zrangebyscore k1 0 10通过分数返回有序集合指定区间内的成员
zrank key memberzrank k1 a返回有序集合中指定成员的索引
zrevrange key memberzrevrange k1 a返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
zscore key memberzscore k1 a返回有序集中,成员的分数值
zrevrange key start stop [WITHSCORES]zrevrange k1 0 1返回有序集中指定区间内的成员,通过索引,分数从高到底
zrevrangebyscore key max min [WITHSCORES]zrevrangebyscore k1 0 10返回有序集中指定分数区间内的成员,分数从高到低排序
zscan key cursor [MATCH pattern] [COUNT count]zscan k1 cursor迭代有序集合中的元素(包括元素成员和元素分值)

(5)计算

语法示例描述
zcount key min maxzcount k1 0 10计算在有序集合中指定区间分数的成员数
zincrby key increment memberzincrby k1 1 a有序集合中对指定成员的分数加上增量 increment
zinterstore destination numkeys key [key …]zinterstore destkey k1 k2计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
zlexcount key min maxzlexcount k1 0 10在有序集合中计算指定字典区间内成员数量
zunionstore destination numkeys key [key …]zunionstore destkey k1 k2计算给定的一个或多个有序集的并集,并存储在新的 key 中
help @zset

# zadd key score member
zadd k1 8 apple 2 banana 3 orange

# 分值排序,按索引查询
zrange k1 0 -1
# 分值排序,按索引查询
zrange k1 0 -1 with sroce

# 分值排序,按分值查询
zrangebyscore k1 3 8

# 分值排序,从小到大取前2个
zrange k1 0 1

# 分值排序,从大到小取前2个
zrerange k1 0 1

# 通过元素取出分值
zscore k1 apple

# 通过元素取出排名
zrank k1 apple

# 元素增加分值
zincrby k1 2.5 banana

# 歌曲排行榜(下载、点击、播放)



zadd k1 80 tom 60 sean 70 baby
zadd k2 60 tom 100 sean 40 yiming

# 相同元素默认相加
zunionstore unkey 2 k1 k2
zrange unkey 0 -1 withscores

# k1权重为1,k2权重为0.5
zunionstore unkey 2 k1 k2 weights 1 0.5
zrange unkey 0 -1 withscores

# 相同元素取最大值
zunionstore unkey 2 k1 k2 aggregate max
zrange unkey 0 -1 withscores


五、排序是怎么实现的?

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值