初识redis:Zset有序集合

2024-08-26 03:12
文章标签 初识 redis 有序 集合 zset

本文主要是介绍初识redis:Zset有序集合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Set作为集合,有两个特点:唯一且无序。

Zset是有序集合,在保证唯一的情况下,是根据什么来排序的呢?排序的规则是什么?

Zset中的member引入了一个属性,分数(score),浮点类型,每个member都会安排一个分数,进行排序的时候,就是按照此处的分数大小来进行升序、降序的操作。

目录

普通命令

ZADD

ZRANGE

ZCARD

ZCOUNT

ZREVRANGE

ZRANGEBYSCORE

ZPOPMAX  ZPOPMIN

BZPOPMAX  BZPOPMAX

ZRANK   ZREVRANK

ZSCORE

ZREM

ZREMRANGEBYRANK

ZREMRANGEBYRANK

ZINCRBY

集合间操作

交集 ZINTERSTORE

并集 ZUNIONSTOR

Zset应用场景


普通命令

ZADD

ZADD key [NX | XX] [GT | LT] [CH] [INCH] score member [score member ...]

添加元素的时候,既要添加元素又要添加分数。

不加 XX | NX  的时候,如果当前member不存在,此时就会达到“添加新member”的效果,如果当前member已经存在,此时就会更新分数。

如果元素有相同的分数可以按照元素自身字符串的字典数来排列。

Zset内部是按照升序来排列的。

命令描述
XX仅仅用于更新已经存在的元素,不会添加新元素。
NX仅用于添加新元素,不会更新已经存在的元素。
CH默认情况下,ZADD返回的是本次添加的元素个数,但指定这个选项之后,就会还包含本次更新的元素的个数。
INCR此时命令类似ZINCRBY的效果,将元素的分数加上指定的分数。此时只能指定一个元素和1分数。

ZRANGE

查询操作,后面加上withscores,可以查询到ZADD添加的分数。

ZCARD

获取一个Zset的基数,即Zset中的元素个数。

ZCOUNT

返回分数在某个区间的元素个数。

ZCOUNT key min max

可以遍历一遍后,就可以知道min和max,但是如果进行遍历,时间复杂度就不是O(logN)了。

实际上,Zset内部会记录每个元素当前的排行(次序),查询到元素就能知道元素所在的次序。

ZREVRANGE

ZRANGE是按照升序来排序,ZREVRANGE则是按照降序来排序。

ZRANGEBYSCORE

按照分数来找元素,通过min max来划分区间。

ZPOPMAX key [count]

ZPOPMAX  ZPOPMIN

删除并返回分数最高(低)的count个元素。

如果存在多个元素分数相同,并且同时为最大(小)值,此时删除的时候仍然只删除一个。

如果分数相同会按照membe字符串的字典序决定先后。

BZPOPMAX  BZPOPMAX

BZPOPMAX key [key ...] timeout

这个命令就是ZPOPMAX的阻塞版本,timeout表示超时时间,表示最多阻塞多久。

ZRANK   ZREVRANK

查询元素的下标(排名)。

 ZRANK得到的下标,是从前往后算的(升序)。ZREVRANK则相反,按照降序。

ZSCORE

查询指定元素的分数。时间复杂度为O(1)。

ZSCORE key member

ZREM

删除指定元素。

ZREM key member [member ...]

ZREMRANGEBYRANK

ZREMRANGEBYRANK key start stop

对于start和stop区间下标的进行元素删除。

ZREMRANGEBYRANK

ZREMRANGEBYSCORE key min max

对于min和max之间的分数,进行元素删除。

ZINCRBY

ZINCRBY key increment member

ZINCRBY命令会将有序集合中指定成员的分数增加指定的值。

如果成员不存在,它会先创建该成员,然后增加分数。

如果指定的分数增加后为负数,则分数会被设置为 0 。

集合间操作

交集 ZINTERSTORE

ZINTERSTORE 是 Redis 用于合并两个或多个有序集合的命令,并存储结果到一个新的有序集合中。

ZINTERSTORE destination numkeys key [key ...] 
[WEIGHTS weight [weight ...]] 
[AGGREGATE SUM|MIN|MAX]

参数

  • destination:存储结果的有序集合的名称。
  • numkeys:参与合并的有序集合的数量。
  • key [key ...]:要合并的有序集合的名称列表。
  • WEIGHTS weight [weight ...]:(可选)每个有序集合的权重列表,用于调整每个集合成员在计算结果时的权重。
  • AGGREGATE:(可选)指定如何合并分数,可以是 SUM(默认)、MIN 或 MAX

可以看到,添加了权重的值,会取权重乘以原集合的值,再取sum添加到新的集合中去。

并集 ZUNIONSTOR

ZUNIONSTOR用法和ZINTERSTORE基本一致。

Zset应用场景

1.微博热搜

2.游戏天梯排行

3.成绩排行

对于zset,很多排行榜的场景,可以用到交集和并集,把一些成绩合并起来,并且通过动态排序来完成。

这篇关于初识redis:Zset有序集合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107386

相关文章

Redis持久化机制之RDB与AOF的使用

《Redis持久化机制之RDB与AOF的使用》:本文主要介绍Redis持久化机制之RDB与AOF的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis持久化机制-RDB与AOF一、RDB持久化机制1、RDB简介2、RDB的工作原理3、RDB的优缺点4

基于Redis实现附近商铺查询功能

《基于Redis实现附近商铺查询功能》:本文主要介绍基于Redis实现-附近商铺查询功能,这个功能将使用到Redis中的GEO这种数据结构来实现,需要的朋友可以参考下... 目录基于Redis实现-附近查询1.GEO相关命令2.使用GEO来实现以下功能3.使用Java实现简China编程单的附近商铺查询4.Red

Redis高可用-主从复制、哨兵模式与集群模式详解

《Redis高可用-主从复制、哨兵模式与集群模式详解》:本文主要介绍Redis高可用-主从复制、哨兵模式与集群模式的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Redis高可用-主从复制、哨兵模式与集群模式概要一、主从复制(Master-Slave Repli

Redis中RedisSearch使用及应用场景

《Redis中RedisSearch使用及应用场景》RedisSearch是一个强大的全文搜索和索引模块,可以为Redis添加高效的搜索功能,下面就来介绍一下RedisSearch使用及应用场景,感兴... 目录1. RedisSearch的基本概念2. RedisSearch的核心功能(1) 创建索引(2

Redis中HyperLogLog的使用小结

《Redis中HyperLogLog的使用小结》Redis的HyperLogLog是一种概率性数据结构,用于统计唯一元素的数量(基数),本文主要介绍了Redis中HyperLogLog的使用小结,感兴... 目录 一、HyperlogLog 是什么?️ 二、使用方法1. 添加数据2. 查询基数China编程3.

Redis中的数据一致性问题以及解决方案

《Redis中的数据一致性问题以及解决方案》:本文主要介绍Redis中的数据一致性问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Redis 数据一致性问题的产生1. 单节点环境的一致性问题2. 网络分区和宕机3. 并发写入导致的脏数据4. 持

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

Redis实现分布式锁全解析之从原理到实践过程

《Redis实现分布式锁全解析之从原理到实践过程》:本文主要介绍Redis实现分布式锁全解析之从原理到实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景介绍二、解决方案(一)使用 SETNX 命令(二)设置锁的过期时间(三)解决锁的误删问题(四)Re

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

Redis中6种缓存更新策略详解

《Redis中6种缓存更新策略详解》Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案,然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性,本文将介绍Redis中6种缓存更... 目录引言策略一:Cache-Aside(旁路缓存)策略工作原理代码示例优缺点分析适用场景策略二:Re