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

redis:set集合命令,内部编码,使用场景

在这里插入图片描述

个人主页 : 个人主页
个人专栏 : 《数据结构》 《C语言》《C++》《Linux》《网络》 《redis学习笔记》

文章目录

  • 前言
  • 命令
    • SADD
    • SMEMBERS
    • SISMEMBER
    • SCARD
    • SPOP
    • SMOVE
    • SREM
    • 集合间操作
      • SINTER
      • SINTERSTORE
      • SUNION
      • SUNIONSTORE
      • SDIFF
      • SDIFFSTORE
  • 内部编码
  • 使用场景
  • 总结


前言

ste集合类型是保存多个字符串类型的元素,但和列表类型不同,集合中元素之间是无序的,元素也不允许重复。

在这里插入图片描述

redis除了支持集合内的增删查改操作,同时支持多个集合取交集,并集,差集。


命令

SADD

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

SADD key member [ member … ]

返回值:本次添加成功的元素个数
时间复杂度:O(1)

在这里插入图片描述


SMEMBERS

获取一个set中所有元素。元素间的顺序是无序的,获取结果的顺序是随机的

SMEMBERS key

返回值:所有元素的列表
时间复杂度:O(N),N为集合元素个数

在这里插入图片描述


注意:
如果执行多次smembers命令,获取结果顺序一致,可能有以下原因:
在这里插入图片描述


SISMEMBER

判断一个元素在不在 set 中

SISMEMBER key member

返回值:1 表示元素在 set 中;0 表示元素不在 set 中 或者 key 不存在
时间复杂度:O(1),set 集合是通过哈希表来实现的

在这里插入图片描述


SCARD

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

SCARD key

返回值:set 内元素的个数
时间复杂度:O(1)

在这里插入图片描述


SPOP

从 set 中删除并返回一个或者多个元素。由于 set 内的元素是无序的,所以取出哪个元素实际是未定义行为,即spop删除元素就是随机删除

SPOP key [count]

返回值:取出的元素
时间复杂度:O(N),N为count的个数

在这里插入图片描述
在这里插入图片描述


SMOVE

将一个元素从 source 取出并放入 destrination 中

SMOVE source destrination member

返回值:1 表示移动成功;0 表示失败
时间复杂度:O(1)
在这里插入图片描述


SREM

将指定的元素从 set 中删除

SREM key member [member …]

返回值:本次删除操作删除的元素个数
时间复杂度:O(N),N为要删除的元素个数

在这里插入图片描述


集合间操作

在这里插入图片描述

SINTER

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

SINTER key [key …]

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

在这里插入图片描述


SINTERSTORE

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

SINTERSTORE destination key [key …]

返回值:交集的元素个数
时间复杂度:O(N * M),N是最小的集合元素个数,M是最大的集合元素个数
在这里插入图片描述


SUNION

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

SUNION key [key …]

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

在这里插入图片描述


SUNIONSTORE

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

SUNIONSTORE destination key [key …]

返回值:并集的元素个数
时间复杂度:O(N),N为给定的所有集合的总元素个数

在这里插入图片描述


SDIFF

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

SDIFF key [ key … ]

返回值:差集的元素
时间复杂度:O(N),N给定的所有集合的总的元素个数
在这里插入图片描述


SDIFFSTORE

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

SDIFFSTORE destination key [key …]

返回值:差集的元素个数
时间复杂度:O(N),N为给定的所有集合的总元素个数

在这里插入图片描述

内部编码

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

  • intset(整数集合):当集合中的元素都是整数并且元素的个数小于 set-max-inset-entries 配置时,redis会使用 intset来作为集合的内部实现;intset是一种紧凑的数据结构,专门用于存储整数数值,通过压缩存储,intset能够节省内存空间
  • hashtable(哈希表):当集合类型无法 intset 的条件时,redis会使用hashtable作为集合的内部实现;hashtable允许存储各种类型的元素,set集合的每个元素都作为一个字符串对象存储,而对应的值则统一为nullptr

在这里插入图片描述

使用场景

  1. 使用 set 来保存用户的标签;标签也就是用户画像,分析出用户的一些特征,分析清楚特征之后,再投其所好
  2. 使用 set 来计算用户之间的共同好友;基于 “集合求交集”,A 和 B是好友,B 和 C是好友,B 和 C 和 D都是好友,就可以将D推荐给A
  3. 使用 set 统计 UV(独立访客数量);每一个用户,访问服务器,都会产生一个 UV,但是同一个用户多次访问,不会是UV增加,UV需要按照用户进行去重

总结

以上就是我的redis学习笔记

在这里插入图片描述

http://www.lryc.cn/news/481980.html

相关文章:

  • 45期代码随想录算法营总结
  • 深入理解Java中的instanceof关键字及接口新特性:方法实现的可能性
  • 【python中如果class没有self会怎行】
  • 【算法】(Python)动态规划
  • EasyExcel 学习之 导出 “提示问题”
  • 应用系统开发(3)低功耗四运算放大器LM324N
  • 基于微信小程序的电商平台+LW示例参考
  • [Android] Graphic Buffer 的申请
  • 【大数据学习 | HBASE高级】storeFile文件的合并
  • 多平台编包动态引入依赖的解决方案
  • [单例模式]
  • 速盾:游戏盾的功能和原理详解
  • Spleeter:音频分离的革命性工具
  • 【笔记】自动驾驶预测与决策规划_Part6_不确定性感知的决策过程
  • openresty入门教程:access_by_lua_block
  • Caused by: org.apache.flink.api.common.io.ParseException: Row too short:
  • hbase的安装与简单操作
  • PySpark本地开发环境搭建
  • 【进阶】Stable Diffusion 插件 Controlnet 安装使用教程(图像精准控制)
  • 调试、发布自己的 npm 包
  • 拓扑学与DNA双螺旋结构的奇妙连接:从算法到分子模拟
  • mysql数据库(四)单表查询
  • JavaEE初阶---properties类+反射+注解
  • HarmonyOS一次开发多端部署三巨头之功能级一多开发和工程级一多开发
  • STL常用遍历算法
  • 前端开发中常见的ES6技术细节分享一
  • 行业类别-智慧城市-子类别智能交通-细分类别自动驾驶技术-应用场景城市公共交通优化
  • [High Speed Serial ] Xilinx
  • Unity学习笔记(3):场景绘制和叠层设置 Tilemap
  • 不吹不黑,客观理性深入讨论中国信创现状