[Redis]Set类型

集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中

1)元素之间是无序的

2)元素不允许重复

一个集合中最多可以存储2^32-1个元素。

Redis 除了支持集合内的增删查改操作,同时还支持多个集合取交集、并集、差集,合理地使用好集合类型,能在实际开发中解决很多问题。

基本命令

sadd命令

将一个或者多个元素添加到 set 中。注意,重复的元素无法添加到 set 中。

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

sadd key member [member ...]

 

smembers命令

获取一个 set 中的所有元素,注意,元素间的顺序是无序的。 

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

smembers key

 

sismember命令

判断一个元素在不在 set 中。

返回值:1 表示元素在 set 中。0 表示元素不在 set 中或者 key 不存在

sismember key member

 

scard命令

获取一个 set 的基数(cardinality),即 set 中的元素个数

返回值:set 内的元素个数

 scard key

spop命令

从 set 中删除并返回一个或者多个元素。

注意,由于 set 内的元素是无序的,所以取出哪个元素实际是未定义行为,即可以看作随机的

返回值:取出的元素

spop key [count]

 

可以看到,同样是spop删除,key和key2的删除顺序不同

当把元素删完后,再删会显示nil,并且键值对也就没了

smove命令

将一个元素从源 set 取出并放入目标 set 中

返回值:1 表示移动成功,0 表示失败

smove source destination member

 

srem命令

将指定的元素从 set 中删除

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

srem key member [member ...]

集合间操作

sinter命令

获取给定 set 的交集中的元素

返回值:交集的元素

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

sinter key [key ...]

 

sinterstore命令

获取给定 set 的交集中的元素并保存到目标 set 中

返回值:交集的元素个数

sinterstore destination key [key ...]

也就是说:把key和key2里的元素的交集放进key3

sunion命令

获取给定 set 的并集中的元素

返回值:并集的元素

sunion key [key ...]

sunionstore命令

获取给定 set 的并集中的元素并保存到目标 set 中

返回值:并集的元素个数

sunionstore destination key [key ...]

sdiff命令

获取给定 set 的差集中的元素

返回值:差集的元素

sdiff key [key ...]

sdiffstore命令

获取给定 set 的差集中的元素并保存到目标 set 中

返回值:差集的元素个数

sdiffstore key [key ...]

 

内部编码

集合类型的内部编码有两种:

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

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

1)  当元素个数较少并且都为整数时,内部编码为 intset:

2)当元素个数超过 512 个,内部编码为 hashtable:

3)当存在元素不是整数时,内部编码为 hashtable:

应用场景

集合类型比较典型的使用场景是标签(tag)。

例如 A 用户对娱乐、体育板块比较感兴趣,B 用户对历史、新闻比较感兴趣,这些兴趣点可以被抽象为标签。有了这些数据就可以得到喜欢同一个标签的人,以及用户的共同喜好的标签,这些数据对于增强用户体验和用户黏度都非常有帮助。 例如一个电子商务网站会对不同标签的用户做不同的产品推荐。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入探讨ChatGPT API中的Tokens计算方式和计算库

引言 在现代人工智能应用中,自然语言处理(NLP)技术无疑是最受关注的领域之一。OpenAI推出的ChatGPT,作为一种先进的对话模型,已经在多个领域展示了其强大的语言生成能力。为了更好地使用ChatGPT API,理解其…

操作系统(3) 处理机调度

目录 一、处理机调度概述 1.基本准则 (1)CPU利用率 (2)系统吞吐量 (3)周转时间 (4)等待时间 (5)响应时间 2.进程调度方式 (1&#xff0…

【Linux】深入理解进程的优先级(Linux 2.6版本O(1)调度算法)

进程的优先级 【前置知识】一、进程的优先级(一)为什么要有优先级?(二)进程的优先级的范围 二、操作系统是如何实现进程的优先级?(Linux内核2.6版本O(1)调度算法) 【前置知识】 首先我们要了解…

【excel】设置二级可变联动菜单

文章目录 【需求】在一级菜单选定后,二级菜单联动显示一级菜单下的可选项【步骤】step1 制作辅助列1.列转行2.在辅助列中匹配班级成员 step2 名称管理器step3 制作二级下拉菜单step4 消除二级菜单中的空白 【总结】 之前做完了 【excel】设置可变下拉菜单&#xff…

导航时间与坐标转换

前言: 该章节代码均在Gitee中开源:因为这章是学校作业,所以稍微正经点. 时空位置转换https://gitee.com/Ehundred/navigation-engineering/tree/master/%E5%8D%AB%E6%98%9F%E5%AF%BC%E8%88%AA%E5%8E%9F%E7%90%86/%E5%AF%BC%E8%88%AA%E6%97…

Idea-Linux远程开发部署

第一步:File->Remote Development 第二步: 第三步: 第四步:在Host位置填写Linux虚拟机的IP地址,在Username、Password填写对应的账号密码后点击Test Connection测试连接。 第五步: 第六步:在…

【leetcode--文本对齐(还没整理完)】

根据题干描述的贪心算法,对于每一行,我们首先确定最多的是可以放置多少单词,这样可以得到该行的空格个数,从而确定该行单词之间的空格个数。 根据题目中填充空格的细节,我们分以下三种情况讨论: 当前行是…

Vue——样式绑定的几种方式

文章目录 前言往期回顾绑定对象绑定对象的另一种写法绑定数组数组与对象的嵌套 前言 样式绑定在vue中属于一种很常见的操作。在之前博客中针对样式的绑定操作,介绍了一个指令v-bind。缩写为:xxx。 vue 官网 样式绑定 往期回顾 先简单回顾下最开始绑定标签样式的操…

搭建gateway网关

1.创建springBoot项目 可以将Server URL换成start.aliyun.com 2.配置路由与跨域处理 路由: server:port: 10010 # 网关端口 spring:application:name: gateway # 服务名称cloud:nacos:server-addr: localhost:8848 # nacos地址gateway:routes: # 网关路由配置- i…

Java的冷知识你知道吗?

1、方法参数不能超过255个 在Java中,方法的参数数量是有限制的,最多不能超过255个。这个知识点可能对于大多数程序员来说并不常用,因此即使是经验丰富的Java开发者也可能不清楚这一点。2、Java中的自动装箱与拆箱 自动装箱是Java 5引入的新特…

站点被篡改快照被劫持解决服务方法教程_一招制敌

站点被篡改快照被劫持解决服务方法教程_一招制敌 被篡改表现形式: 站点打不开或跳转到别的网站。 攻击者目的: 报复、勒索、卖防御产品(如DDOS防御产品)。 攻击成本: 工具(如VPN购买)成本、人…

当新手小白有了一块【香橙派OrangePi AIpro】.Demo

当新手小白有了一块【香橙派OrangePi AIpro】.Demo 文章目录 当新手小白有了一块【香橙派OrangePi AIpro】.Demo一、香橙派OrangePi AIpro概述1.简介2.引脚图 二、“点亮”香橙派OrangePi AIpro1.官方工具下载2.官方镜像下载3.镜像烧录4.访问香橙派 AIpro 三、香橙派OrangePi A…

数据结构第三篇【链表的相关知识点一及在线OJ习题】

数据结构第三篇【链表的相关知识点一及在线OJ习题】 链表链表的实现链表OJ习题顺序表和链表的区别和联系 本文章主要讲解关于链表的相关知识,喜欢的可以三连喔 😀😃😄😄😊😊🙃&#…

Dubbo 自定义 Filter 编码实例

Dubbo的Filter机制为我们做应用的扩展设计提供了很多可能性,这里的Filter也是“责任链”机制的一种实现场景,作为Java码农,我们也经常接触到很多责任链的实现场景,如Tomcat进入Servlet前的filter,如Spring Aop代理的链…

性能飙升50%,react-virtualized-list如何优化大数据集滚动渲染

在处理大规模数据集渲染时,前端性能常常面临巨大的挑战。本文将探讨 react-virtualized-list 库如何通过虚拟化技术和 Intersection Observer API,实现前端渲染性能飙升 50% 的突破!除此之外,我们一同探究下该库还支持哪些新的特性…

自友科技破解走班教育排课难题

新高考后,校园教务都面临着晋级,其中走班教育的分班排课是个巨大的挑战。 所以在分班排课的时候要清楚一下几个问题 一是:清楚的核算学生的选考科目。学生选科提交后做好并承认,最好是在分班后不要改或很少的一部分人改动。 二是…

手写防抖debounce

手写防抖debounce 应用场景 当需要在事件频繁触发时,只执行最后一次操作,可以使用防抖函数来控制函数的执行频率,比如窗口resize事件和输入框input事件; 这段代码定义了一个名为 debounce 的函数,它接收两个参数:fn…

linux中最基础使用的命令

小白学习记录: 前情提要:Linux命令基础格式!查看 ls看目录的小技巧 进入指定目录 cd查看当前工作目录 pwd创建一个新的目录(文件夹) mkdir创建文件 touch查看文件内容 cat、more操作文件、文件夹- 复制 cp- 移动 mv- 删除【危险操作&#xff…

Scrum 的速度如何衡量和提高

了解你的 Scrum 团队的实际开发速度是非常多敏捷团队的诉求,而速度(Velocity)作为敏捷项目的度量工具,为管理者提供了对团队工作能力深入了解的机会。 这份指南将深入探讨 Scrum 中速度的概念,指导你如何进行计算&…

cURL error 60: SSL certificate problem: unable to get local issuer certifica

本地小程序把接口换到本地的服务器接口,然后就报错了: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) 经查询查到:此问题的出现是由于没有配…