Redis常见数据类型(6)-set, zset

2024-05-25 19:44

本文主要是介绍Redis常见数据类型(6)-set, zset,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

Set

命令小结

内部编码

使用场景

用户画像

其它

Zset有序集合

普通指令

zadd

zcard

zcount

zrange

zrevrange

​编辑 

 zrangebyscore

zpopmax/zpopmin

bzpopmax/bzpopmin

zrank/zrevrank

zscore

zrem

 zremrangebyrank

zremrangebyscore


Set

命令小结

命令功能时间复杂度
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]在集合中随机获取count个元素O(count)
spop key [count]在集合中随机删除count个元素O(count)
smembers key获取集合中的所有元素O(k), k是元素个数
sinter key [key...] sinterstore求多个集合的交集O(m * k)
sunion key [key...] sunionstore求多个集合的并集O(k), k是多个集合元素个数的总和
sdiff key [key...] sdiffstore求多个集合的差集O(k), k是多个集合元素个数的总和

内部编码

集合中的内部编码有两种: 

intset(整数集合): 当集合中的元素都是整数并且元素的个数小于set-max-intset-entires配置时, Redis会选用intset来作为集合的内部实现, 从而减少内存的使用. 

hashtable(哈希表): 当集合类型无法满足intset的条件时, Redis会使用hashtable作为集合的内部实现. 

 

使用场景

用户画像

集合类型比较典型的使用场景就是用户画像, 例如在抖音中, 用户A对美女跳舞, 唱跳rap篮球感兴趣, 用户B对历史, 二次元游戏感兴趣, 那么这些特征就会被记录为用户画像, 这些数据对提升用户体验和用户黏度就非常有帮助.

其它

在社交软件中查找共同好友. 以及互联网产品中衡量用户量, 用户规模非常有帮助(主要是按照浏览量等指标来确定, 如果同一个用户多次访问, 就会去重访问信息, 这样有助于准确地提供用户规模等信息). 

Zset有序集合

简而言之, 它还是一种集合, 但是与集合不同, 它在里面引入了一个浮点类型 -- 分数(score)这个概念, 我们可以通过这个分数作为排序依据, 使其有序(之前如list中是使用下标的概念).  

比如我们按照伤害对如下植物进行排序:

有序集合提供了指定分数和元素的范围查找, 计算成员排名等功能, 合理利用有序集合, 能解决很多问题.

普通指令

zadd

功能: 添加或者更新指定的元素以及关联的分数到zset中, 分数应该符合double类型

语法: 

zadd key [nx | xx] [gt | lt] [ch] [incr] score member [score member...] (注: 分数可重复)

相关选项介绍: 

xx|nx: xx仅仅用于更新存在的元素, 不添加新元素; nx可以更新未存在的元素(不写默认为nx)

gt | lt : 如果要更新分数, 发现比现在给定的分数大(小), 此时就更新成功, 否则不更新.

ch: 默认情况下, zadd返回的是本次添加的元素个数, 但指定这个选项之后, 就会还包含本次更新的元素个数.

incr: 此时命令类似zincrby 的效果, 将元素分数加上指定的分数, 此时只能指定一个元素/分数. 

时间复杂度: O(logN): 因为要找到插入元素的位置, 就会使用类似二分查找这种方式寻找.

返回值:  本次添加的元素个数.

 

其余参数可以自行测试.

zcard

功能: 获取zset中的元素数目

语法:

zcard key

返回值: zset中的元素个数. 

zcount

功能: 返回分数在min和max之间的元素个数, 默认情况下, min和max都是包含的, 可以通过 ( 排除.即一般情况下为闭区间, 使用(的那个数字的那个部分是开区间.

语法:

zcount key min max

时间复杂度: O(logN), 因为实际上在Zset内能够得知元素的位次, 因此我们只需要定位到min和max的位次, 然后相减即可. 

返回值: 满足条件的元素列表个数 

 

zrange

功能: 返回指定区间里的元素, 分数按照升序排序. 带上withscores可以把分数也返回.

语法:

 zrange key start stop [withscores]

此处的[start, stop]为下标构成的区间,  从0开始, 支持负数.

时间复杂度: O(logN + M), 先找到start/ stop, 然后M是指start与stop之间的元素数目.

返回值: 区间里的元素列表.

zrevrange

功能: 返回指定区间里的元素, 分数按降序排序, 带上withscores也可以将分数返回.

语法:

zrevrange key start stop [withscores]

时间复杂度: O(logN + M)

返回值: 区间元素列表.

 

 zrangebyscore

返回分数在min, max之间的元素, 默认情况下, min和max都是包含的, 可以通过 ( 排除.

语法:

zrangebyscore key min max

时间复杂度: O(logN + M)

返回值: 区间的元素列表 

zpopmax/zpopmin

删除并返回分数最高/低的count个元素

语法:

zpopmax/zpopmin key [count]

时间复杂度: O(logN * M) N是有序集合数目, M是要删除数目, 虽然我们记录了次序, 但我们是通过M次普通删除(每次删一个), 因此时间复杂度是这个.

返回值: 分数和元素列表.

bzpopmax/bzpopmin

功能: zpopmax/zpopmin阻塞版本.

语法:

bzpopmax/bzpopmin key [key...] timeout 

时间复杂度: O(N)

zrank/zrevrank

功能: 返回指定元素的排名, 升序/降序

语法:

zrank/zrevrank key member

时间复杂度: O(logN)

返回值, 排名. 

 

zscore

 功能: 返回指定元素的分数.

语法:

zscore key member

时间复杂度: O(1) 

返回值: 分数

zrem

功能: 删除指定元素.

语法:

zrem key member [member...] 

时间复杂度: O(M * logN)

返回值: 本次操作删除的元素个数.

 zremrangebyrank

功能: 按照排序, 升序删除指定范围的元素, 左闭右闭.

语法:

zremrangebyrank key start stop

时间复杂度: O(logN + M)

返回值: 本次操作的元素个数.

zremrangebyscore

功能: 按照分数删除指定范围的元素, 左闭右闭.

语法

zremrangebyscore key min max

时间复杂度: O(logN + M)

返回值: 本次操作删除的元素数目. 

这篇关于Redis常见数据类型(6)-set, zset的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

Mysql常见的SQL语句格式及实用技巧

《Mysql常见的SQL语句格式及实用技巧》本文系统梳理MySQL常见SQL语句格式,涵盖数据库与表的创建、删除、修改、查询操作,以及记录增删改查和多表关联等高级查询,同时提供索引优化、事务处理、临时... 目录一、常用语法汇总二、示例1.数据库操作2.表操作3.记录操作 4.高级查询三、实用技巧一、常用语

python 常见数学公式函数使用详解(最新推荐)

《python常见数学公式函数使用详解(最新推荐)》文章介绍了Python的数学计算工具,涵盖内置函数、math/cmath标准库及numpy/scipy/sympy第三方库,支持从基础算术到复杂数... 目录python 数学公式与函数大全1. 基本数学运算1.1 算术运算1.2 分数与小数2. 数学函数

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加