Redis 中 Set 数据结构详解

用法

Redis 中的 Set 是一个无序,不重复集合(里面的元素为字符串),支持常用的集合操作。

常见命令

1. 增

添加一个或多个元素到 set 中

SADD key member [ member ... ]
返回值: 添加成功的元素个数

将一个元素移到另一个 set 中 

SMOVE source destination member
source(原来的 set),destination(移动到的 set),member (要移动的元素)
返回值: 1 --- 成功,0 --- 失败

2. 删

删除指定的元素

SREM key member [member ...]
返回值: 本次操作删除的元素个数。

随机删除元素

SPOP key [count](count表示要删除的个数)

返回值:返回删除的元素

3. 查

获取元素的个数

SCARD key

获取 set 中所有的元素

SMEMBERS key
返回值: 所有元素的列表。

判断当前的元素是否在集合中 

SISMEMBER key member(你想要判断的成员)

返回值: 1 ---  存在,  0 --- 该元素不存在 / key不存在 

4. 交集,并集,差集 

获取 set 的交集中的元素 

SINTER key [key ...]
返回值: 交集的元素。
SINTERSTORE destination key [key ...](把算好的交集放到指定的 destination 中)
返回值: 交集的元素个数

 获取 set 的并集中的元素

SUNION key [key ...] 

返回值:并集的元素。

SUNIONSTORE destination key [key ...](把算好的并集放到指定的 destination 中)
返回值: 并集 的元素个数

 获取 set 的差集中的元素 

SDIFF key [key ...]
返回值: 差集的元素。
SDIFFSTORE destination key [key ...](把算好的差集放到指定的 destination 中)
返回值: 差集元素的个数

内部编码

intset:当集合中的元素都是整数且数量较少时,Redis 使用 intset 结构。intset 是一个紧凑的整数数组,节省内存。

hashtable:当集合中的元素数量较多或类型多样时,Redis 会使用 hashtable 编码。hashtable 提供了快速的查找性能。


应用场景

标签系统:可以使用 Set 存储用户的标签,如兴趣爱好。通过集合运算,可以轻松实现标签交集、并集和差集的计算。

1. 给用户添加标签

sadd user:1:tags tag1 tag2 tag5
sadd user:2:tags tag2 tag3 tag5

2. 给标签添加用户

sadd tag1:users user:1 user:3
sadd tag2:users user:1 user:2 user:3

3. 删除用户下的标签

srem user:1:tags tag1 tag5

4. 删除标签下的用户

srem tag1:users user:1
srem tag5:users user:1

5. 计算用户的共同兴趣爱好

sinter user:1:tags user:2:tags

唯一性检测:利用 Set 的无序且不重复特性,可以快速检测出数据集中的重复元素。

社交网络:在社交网络应用中,可以使用 Set 存储用户的好友列表或关注列表,并通过集合操作实现好友推荐等功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/335390.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Plesk面板上网站无法访问如何查看日志

近期我的网站出现无法访问的问题,这边想要查询为什么出现无法访问的原因,但不知道如何在主机上面进行检查,由于我使用的Hostease的Windows虚拟主机产品默认带普通用户权限的Plesk面板,因此联系Hostease的咨询了Hostease技术支持&a…

Gartner发布评估威胁情报计划有效性指南:评估威胁情报有效性的四个步骤

许多组织都在努力实施 TI 并评估其价值。安全和风险管理领导者必须使用优先情报要求来评估其 TI 计划的有效性,并根据其组织战略完善该计划。 主要发现 尽管许多组织已将威胁情报 (TI) 纳入其安全计划,但他们很难评估其性能、成熟度以及在相关产品和服务…

1比1万地形图符号库分享

我们在《1:2.5万、1:5万、1:10万军用地形图图式》一文中,为大家分享过军用地形图式。 还在《超实用三调符号库分享下载》一文中,为大家分享过三调符号库。 现在再为你分享一个1比1万的地形图符号库,请在文末查看符号…

2023年西安交通大学校赛(E-雪中楼)

E.雪中楼 如果算出按南北的序列,再转成从低到高的编号序列,岂不是太麻烦了,幸好,没有在这方面费长时间,而是意识到,本质就是要从低到高的编号序列,所以我就按样例模拟了一下,当a[i]0…

AI生成四季变化解决方案,四季之美,一图尽揽

随着AI技术已经渗透到我们生活的方方面面,在这个充满变化的时代,美摄科技以其前沿的AI生成技术,为企业带来了全新的视觉体验——AI生成四季变化解决方案。这一方案不仅能够让车辆实拍的照片焕发不同季节的风采,更能在不改变原图构…

中国企业出海,哪些业务需要负载均衡?

国内企业出海的进程正在加速。中国的出海企业剑指跨境电商、社交、游戏、短剧等市场,其中尤其以跨境电商的数据最为突出。据官方数据,2023年我国跨境电商进出口总额达到2.38万亿元,比2016年增长近50倍,占货物贸易总规模的5.7%。 …

一行命令将已克隆的本地Git仓库推送到内网服务器

一、需求背景 我们公司用gitea搭建了一个git服务器,其中支持win7的最高版本是v1.20.6。 我们公司的电脑在任何时候都不能连接外网,但是希望将一些开源的仓库移植到内网的服务器来。一是有相关代码使用的需求,二是可以建设一个内网能够查阅的…

【Java】HOT100+代码随想录:动态规划(下)

目录 三、打家劫舍 LeetCode198:打家劫舍 LeetCode213:打家劫舍ii LeetCode337:打家劫舍iii(树形) 四、股票问题 时间不多了,其他的先不写了 LeetCode121:买卖股票的最佳时机 五、子序列…

【Python】 如何在Python中表示枚举类型(Enum)

枚举(Enum)是一种特殊的数据类型,它允许我们为一组固定的常量赋予更易读的名字。在Python中,枚举类型可以通过enum模块来实现,这个模块在Python 3.4及以后的版本中被引入。枚举类型不仅可以使代码更加清晰,…

汇编原理(三)编程

源程序: 汇编指令:有对应的机器码与其对应 伪指令:无对应的机器码,是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作。 ex1:XXX segment、XXX ends这两个是一对成对使用的伪指令,且必须会被用…

蓝桥杯Web开发【大学组:国赛】2022年真题

1.分一分 如果给你一个数组,你能很快将它分割成指定长度的若干份吗? 1.1 题目问题 请在 js/index.js 文件中补全函数 splitArray 中的代码,最终返回按指定长度分割的数组。 具体要求如下: 将待分割的(一维&#x…

香橙派AIpro快速上线——纯小白体验版本!!!

目录 前言 一、快速上线 官网的样例测试 ​编辑解决模型转换问题的步骤 如果系统卡死 二、usb摄像头测试 三、总结 模型转换 小结 前言 香橙派AIproubuntu系统32G sd卡 香橙派AIpro开发板采用昇腾AI技术路线,接口丰富且具有强大的可扩展性,提…

Redis面试题深度解析

1、我看你做的项目中,都用到了redis,你在最近的项目中哪些场景使用了redis呢? 2、缓存穿透 布隆过滤器的误判现象 Redisson和Guava都对布隆过滤器进行了实现 3、缓存击穿 互斥锁,就是一个线程来修改,并占据了锁,另外其…

FreeRTOS【8】二值信号量使用

1.开发背景 FreeRTOS 提供了队列可以在线程间快速交换信息,那么还有没有其他交互渠道?答案是有的,相对于队列传递信息,还有更轻量级的线程唤醒操作,那就是信号量,而二值信号量就是最简单的一种。 二值信号量…

SQL开窗函数

文章目录 概念:语法:常用的窗口函数及示例:求平均值:AVG() :求和:SUM():求排名:移动平均计数COUNT():求最大MXA()/小MIN()值求分区内的最大/最小值求当前行的前/后一个值 概念: 开窗…

UML 在 vs-code上的快速使用

UML 在 vs-code上的快速使用 1.软件准备工作2.创建第一张甘特图2.1 创建 UML文件: xxxx. puml2.2 输入甘特图代码2.3 VS code 生成甘特图 结束 。 1.软件准备工作 使用的软件为:VS CODE使用插件 : PluntUML2.创建第一张甘特图 2.1 创建 UML文件: xxxx. …

云端力量:利用移动云服务器高效部署Spring Boot Web应用

文章目录 一、移动云介绍二、移动云产品选择三、体验云主机ECS四、使用移动云服务器部署SpringBoot Web应用4.1移动云ECS安装JDK4.2移动云ECS安装MySQL4.3移动云ECS数据库插入数据4.4移动云ECS部署Spring Boot Web应用 总结 一、移动云介绍 移动云是中国移动基于自研的先进技术…

网络延迟监控

网络中的延迟是指数据通过网络传输到其预期目的地所需的时间,它通常表示为往返延迟,即数据从一个位置传输到另一个位置所需的时间。 网络延迟(也称为滞后)定义为数据包通过多个网络设备进行封装、传输和处理,直到到达…

GitLens或者Git Graph在vscode中对比文件历史变化,并将历史变化同步到当前文件中

有时候我们上周改的代码,现在想反悔把它恢复过来,怎么办???很好,你有这个需求,说明你找对人了,那就是我们需要在vscode中安装这个插件:GitLens或者Git Graph,…

kafka-偏移量图解

生产者偏移量:生产者发送消息时写入到哪个位置(主题的每个分区会存储一个 leo 即将写入消息的偏移量),每次写完消息 leo 会 1 消费者偏移量:消费者从哪个位置开始消费消息,小于等于 leo,每个组…