【Redis】set 和 zset 类型的介绍和常用命令

news/2025/2/2 23:46:31 标签: redis, 数据库, 缓存

1. set

1.1 介绍

set 类型和 list 不同的是,存储的元素是无序的,并且元素不允许重复,Redis 除了支持集合内的增删查改操作,还支持多个集合取交集,并集,差集

1.2 常用命令

命令

介绍

时间复杂度

sadd key element [element ...]

将一个或多个元素添加到指定的集合中

O (k),k 是要添加的元素个数

srem key element [element ...]

从指定集合中移除一个或多个元素

O (k),k 是要移除的元素个数

scard key

获取指定集合中的元素数量

O (1)

sismember key element

判断指定元素是否存在于集合中

O (1)

srandmember key [count]

从指定集合中随机返回一个或多个元素

O (n),n 是count的值

spop key [count]

从指定集合中随机移除并返回一个或多个元素

O (n),n 是count的值。

smembers key

获取指定集合中的所有元素。

O (k),k 是集合中的元素个数

sinter key [key ...] sinterstore

求多个集合的交集

O (m * k),k 是几个集合中元素最小的个数,m 是参与交集计算的键个数

sunion key [key ...] sunionstore

求多个集合的并集

O (k),k 是多个集合的元素个数总和

sdiff key [key ...] sdiffstore

求多个集合的差集

O (k),k 是多个集合的元素个数总和

1.3 内部编码

intset:当集合中的所有元素都是整数,并且元素数量较少时会使用intset编码来存储集合

hashtable:当集合中的元素不满足intset的条件,会使用hashtable编码来存储集合

1.4 应用场景

用户标签:为用户、商品等实体打标签,每个实体对应一个 Set,标签作为 Set 中的元素。

去重:在处理大量数据时,经常需要去除重复元素。例如在日志分析中,记录用户的访问 IP 地址,使用 Set 可以自动对 IP 进行去重,保证每个 IP 只被记录一次。

2. zset

2.1 介绍

zset 保留了 set 集合中不能有重复成员的特点,与之不同的是,zset 中的元素是有序的,集合中的每一个元素都有一个唯一的浮点类型的分数(score)与之关联,依次来进行排序,使得有序集合中的元素可以维护有序性,虽然集合中的元素是不能重复的,但是分数允许重复。

2.2 常用命令

命令

介绍

时间复杂度

zadd key score member [score member ...]

向有序集合中添加一个或多个成员,以及成员对应的分值

O (k * log (n)),k 是添加成员的个数,n 是当前有序集合的元素个数

zcard key

获取有序集合的成员数量

O (1)

zscore key member

获取有序集合中指定成员的分值

O (1)

zrank key member

返回有序集合中指定成员的排名(从 0 开始,按分值从小到大排序)

O (log (n)),n 是当前有序集合的元素个数

zrevrank key member

返回有序集合中指定成员的排名(从 0 开始,按分值从大到小排序)

O (log (n)),n 是当前有序集合的元素个数

zrem key member [member ...]

移除有序集合中的一个或多个成员

O (k * log (n)),k 是删除成员的个数,n 是当前有序集合的元素个数

zincrby key increment member

为有序集合中指定成员的分值加上增量 increment

O (log (n)),n 是当前有序集合的元素个数

zrange key start end [withscores]

按分值从小到大返回有序集合中指定区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zrevrange key start end [withscores]

按分值从大到小返回有序集合中指定区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zrangebyscore key min max [withscores]

按分值从小到大返回有序集合中指定分值区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zrevrangebyscore key max min [withscores]

按分值从大到小返回有序集合中指定分值区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zcount key min max

计算有序集合中指定分值区间内成员的数量

O (log (n)),n 是当前有序集合的元素个数

zremrangebyrank key start end

按排名删除有序集合中指定区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zremrangebyscore key min max

按分值删除有序集合中指定分值区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zinterstore destination numkeys key [key ...]

计算给定的一个或多个有序集合的交集,并将结果存储在新的有序集合 destination 中

O (n * k) + O (m * log (m)),n 是输入集合最小的元素个数,k 是集合个数,m 是目标集合元素个数

zunionstore destination numkeys key [key ...]

计算给定的一个或多个有序集合的并集,并将结果存储在新的有序集合 destination 中

O (n) + O (m * log (m)),n 是输入集合总元素个数,m 是目标集合元素个数
 

2.3 内部编码

ziplist:如果有序集合中的元素个数较少,或者单个元素体积较小,就使用 ziplist 存储

skiplist:如果元素个数较多或者单个元素体积较大,使用 skiplist 存储

2.4 应用场景

基于 zset 有序的特点,可以用到很多场景中:

  1. 排行榜系统:比如游戏中的玩家排行榜,以玩家的积分作为分值,玩家昵称作为成员,能按分值(积分)对玩家进行排序,快速获取排名靠前或特定区间的玩家信息;视频平台的视频热度排行榜,以视频的播放量、点赞数等综合指标作为分值,视频 ID 作为成员,展示热门视频。
  2. 计分系统:在在线考试系统中,以考生的考试成绩作为分值,考生 ID 作为成员,可方便统计成绩排名、获取特定分数段的考生信息。

http://www.niftyadmin.cn/n/5840376.html

相关文章

跨组织环境下 MQTT 桥接架构的评估

论文标题 中文标题: 跨组织环境下 MQTT 桥接架构的评估 英文标题: Evaluation of MQTT Bridge Architectures in a Cross-Organizational Context 作者信息 Keila Lima, Tosin Daniel Oyetoyan, Rogardt Heldal, Wilhelm Hasselbring Western Norway …

微信小程序1.3 开发工具的使用

内容提要 1.1 创建项目 1.2 开发者工具界面 1.3 模拟器区域 创建项目 开发者工具界面 模拟器区域

windows蓝牙驱动开发-查询蓝牙接口

蓝牙驱动程序堆栈会公开以下接口,配置文件驱动程序可使用这些接口与蓝牙设备交互。 GUID_BTHDDI_SDP_NODE_INTERFACE: 配置文件驱动程序会查询 GUID_BTHDDI_SDP_NODE_INTERFACE 以获取指向允许其创建服务发现协议 (SDP) 记录的函数的指针。此接口对应于…

PostgreSQL 数据查询操作(排序、筛选、连接、分组、子查询)

(1)排序查询与筛选查询操作 排序查询使用ORDER BY,对某个表中的列1按照列升序(ASC,默认升序)或降序(DESC)排序,排序后展示列1和列2两列。此外,也可以按照多列…

【数据结构-前缀树】力扣208. 实现 Trie (前缀树)

Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。 请你实现 Trie 类: Trie() 初始化前缀树对象。 void…

代码随想录 Day 15 | 【第六章 二叉树】110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数

一、110.平衡二叉树 再一次涉及到,什么是高度,什么是深度,可以巩固一下。 题目链接/文章讲解/视频讲解:代码随想录 1. 整体逻辑 一棵高度平衡二叉树定义为平衡二叉树 是指该树所有节点的左右子树的高度相差不超过 1。通过比较两两…

洛谷 P8724 [蓝桥杯 2020 省 AB3] 限高杆

洛谷题目传送门 题目描述 某市有 n 个路口,有 m 段道路连接这些路口,组成了该市的公路系统。其中一段道路两端一定连接两个不同的路口。道路中间不会穿过路口。 由于各种原因,在一部分道路的中间设置了一些限高杆,有限高杆的路…

工作流引擎Camunda

一,什么是Camunda? Camunda是一个开源的工作流引擎和业务流程管理平台,基于Java和Spring框架构建。它支持BPMN 2.0标准,允许用户通过图形界面或编程方式定义复杂的工作流和业务流程。Camunda可以嵌入到任何Java应用程序中&#x…