当前位置: 首页 > news >正文

Redis_9_Set

Set

提到Set,可能表示多种含义:

1、集合

2、设置(和get对应)

Redis中的集合表示第一种含义,集合就是把一些有关联的数据放到一起~~

1、集合中的元素是无序的

2、集合中国的元素是不能重复的

此处说的无序和前面提到的list这里提到的有序是对应的。

有序:顺序很重要,变换一下顺序,就是不同的list了。

无序:顺序不重要,变换一下顺序,集合还是哪个集合。

list:[1,2,3]和[2,1,3]是两个不同的list

set:[1,2,3]和[2,1,3]是同一个集合

和list类似,集合中的每个元素也都是string类型。(可以使用json这样的格式让string也能存储结构化数据)。

命令

sadd

将一个或者多个元素添加到set中.

SADD key member [member ...]

ps:member        集合中的元素

时间复杂度:O(1)

返回值:本次操作,添加成功了几个元素

smembers

如何查看刚才集合中的元素呢?=》使用smembers即可

SMEMBERS key

时间复杂度:O(N),N是集合元素的个数

返回值:所有元素的列表

sismembers

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

SISMEMBER key member

时间复杂度:O(1)

返回值:1表示存在,0表示不存在。

scard

获取当前集合中元素的个数。

SCARD key

时间复杂度:O(1)

返回值:当前集合中元素的个数

spop

随机删除列表中的一个/多个元素。

SPOP key [count]

ps:此处的count不写,表示随机删除一个元素;写了则表示删除count个元素。

时间复杂度:删除1个元素时间复杂度为O(1),删除k个元素,时间复杂度为O(k)。

返回值:删除的元素的值,没有则返回空。

此处,官方文档承诺了我们是随机删除。并且官方文档中提到,spop中使用到了“生成随机数”的方式进行实现。

可以看到,每次删除的元素顺序都是随机的:

srandmember

随机获取集合的一个元素

SRANDMEMBER key [count]

时间复杂度:count为1的时候,O(1);count为N的时候,O(N)。

返回值:随机获取到的元素

smove

把member从source删除再插入到destination中。

SMOVE source destination member

时间复杂度:O(1)

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

那么如果我给key中再插入一个1再把它插入key2中,会怎么样呢?

针对上述情况,smove不会视为出错,仍然会按照删除-插入进行操作。


那如果要移动的元素在source中不存在呢?

此时就会返回0,表示移动失败了


srem

将指定元素从set中删除。

SREM key member [member ...]

ps:可以一次删除一个member,也可以一次删除多个member。

时间复杂度:O(N),N是要删除的元素个数。

返回值:本次操作删除成功元素个数。

集合间操作

在高中数学的集合中,我们常常要涉及三个概念:交集(inter)、并集(union)、差集(diff)。

交集:最终结果同时出现在两个集合中。

A:1 2 3 4

B:3 4 5 6

A和B的交集:3 4

并集:把多个集合中的集合集中放在一起,如果元素有重复,也最终只保留一份。

A:1 2 3 4

B:3 4 5 6

A和B的并集:1 2 3 4 5 6

差集:A和B做差集,就是找出哪些元素,在A中存在,同时在B中不存在。

A:1 2 3 4

B:3 4 5 6

A和B的差集:1 2

sinter

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

SINTER key [key ...]

ps:此处的每个key都对应一个集合。

时间复杂度:O(N*M),N是最小的集合元素个数,M是最大的集合元素个数。

返回值:交集的元素。

sinterstore

获取给定set的交集并放到目标destination中。

SINTERSTORE destination key [key ...]

时间复杂度:O(N*M),N是最小的集合元素个数,M是最大的集合元素个数。

返回值:交集的元素个数。

sunion

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

SUNION key [key ...]

时间复杂度:O(N),N是给定所有集合的总元素个数。

返回值:并集的元素。

sunionstore

获取给定set的并集并放到目标destination中。

SUNIONSTORE destination key [key ...]

时间复杂度:O(N),N给定的所有集合的总的元素个数。

返回值:并集的元素个数。

sdiff

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

SDIFF key [key ...]

时间复杂度:O(N),N给定的所有集合的总的元素个数。

返回值:差集元素

sdiffstore

获取给定set的差集并放到目标destination中。

SDIFFSTORE destination key [key ...]

时间复杂度:O(N)

返回值:差集元素个数。

总结

Set的编码方式

1、inset(整数集合)

为了节省空间,做出的特定优化~

当元素均为整数,并且元素个数不是很多的时候,使用整数集合。

2、哈希表

Set的应用场景

1、使用Set来保存用户的“标签”

我们使用的APP会对我们进行一个“用户画像”,所谓“用户画像”就是分析你这个人的一些特征,分析这些特征之后,再投其所好,给你推送一些视频、商品……而这些特征就像一个个的标签存储在集合中,当你登录之后,就从集合中取出一些标签,再根据这些标签的类型,给你进行推送。还有的互联网产品会进行合作,对用户的标签进行取并集,从而更好地进行推送。

2、使用Set来计算用户之间的共同好友

相当于是对一个集合求交集。

比如:A和B是好友。

A和C是好友。

B和C和D是好友。

这三个集合一取交集,系统就会把D推荐给A。

3、使用Set统计uv

什么是uv呢?

一个互联网产品衡量用户规模,主要有两个指标:

1、PV:page view,用户每次访问该服务器,就会产生一个pv。

2、UV:user view,每个用户,访问服务器,都会产生一个uv,但是同一个用户多次访问,不会使uv增加,

uv需要按照用户进行去重,上述去重过程的实现可以使用set。

http://www.dtcms.com/a/588952.html

相关文章:

  • 计算机网络培训课程大庆网站建设优化
  • 网站正在建设中永久wordpress 前台文章
  • Electron 桌面应用开发入门指南:从零开始打造 Hello World
  • 深入解析手机快充技术原理与实现
  • JavaScript 数组方法大全
  • 电子商务网站建设与管理的实验报告个人怎样免费建网站
  • STM32F103学习笔记-16-RCC(第3节)-使用HSE配置系统时钟并使用MCO输出监控系统时钟
  • LeRobot 入门教程(十五)从Hub加载环境
  • HTML DOM 总结
  • 社群经济下开源链动2+1模式AI智能名片S2B2C商城小程序的信任重构机制研究
  • Git 命令大全:从基础到高级操作
  • Git_Rebase
  • 【深度学习|学习笔记】异常检测概论 — 从经典算法到深度学习(含实用 Python 示例)
  • 如何建立一个视频网站html5 手机网站页面实例
  • FlutterPlugin接口实现与插件架构设计
  • 图漾GM461-E1相机专栏
  • Flutter与鸿蒙原生MethodChannel通信机制深度解析
  • Navigation2 行为树架构源码级分析与设计原理
  • 基于时频域霍夫变换的汽车雷达互干扰抑制——论文阅读
  • 贵阳网站建设建站系统怎么找网站是由什么建的
  • 一本通网站1128题:图像模糊处理
  • DrissionPage遇到iframe
  • 基于信号分解的FMCW雷达相互干扰抑制——论文阅读
  • 未来的一些想法和规划
  • 线代强化NO3|线性方程组|特征值和特征向量|矩阵的相似性|实对称矩阵|二次型
  • K8S RD: Docker与Kubernetes运维核心技术整合指南
  • PERL Docker 容器化部署指南
  • root@lll:/data# sudo docker compose up -d 输入这个命令 控制台一直没有任何的反应 我需要如何排查呢?
  • 佛山白坭网站建设wordpress加密修改密码
  • 网站主体必须要与域名注册人相同医院做网站的意义