Redis——常用数据类型set

embedded/2024/9/21 13:06:39/

目录

      • set
        • 普通命令
          • sadd
          • smembers key
          • sismember
          • spop
          • srandmember
          • scard
          • smove
          • srem
        • 集合间操作
          • sinter
          • sinterstore
          • sunion
          • sunionstore
          • sdiff
          • sdiffstore
        • set的编码方式
        • set的应用

set

谈到set这个术语,可能会有多种含义

  1. 集合
  2. 设置(get对应)
普通命令
sadd
SADD key member [member ...]//将⼀个或者多个元素添加到 set 中。注意,重复的元素⽆法添加到 set 中
//时间复杂度:O(1)
//返回值:本次添加成功的元素个数
smembers key
SMEMBERS key//获取集合中的所有元素
//时间复杂度:O(N) N为集合中元素的个数
//返回值:所有元素的列表
sismember
SISMEMBER key member//判断⼀个元素在不在 set 中
//时间复杂度:O(1)
//返回值:1 表⽰元素在 set 中。0 表⽰元素不在 set 中或者 key 不存在
spop
SPOP key [count]//从 set 中删除并返回⼀个或者多个元素。注意,由于 set 内的元素是⽆序的
//所以取出哪个元素实际是未定义⾏为,即可以看作随机的。
//时间复杂度:O(N), n 是 count
//返回值:取出的元素。
srandmember
srandmember key [count]//获取集合中随机一个元素
scard
SCARD key//获取⼀个 set 的基数(cardinality),即 set 中的元素个数
//时间复杂度:O(1)
//返回值:set 内的元素个数
smove
SMOVE source destination member//将⼀个元素从源 set 取出并放⼊⽬标 set 中
//时间复杂度:O(1)
//返回值:1 表⽰移动成功,0 表⽰失败
srem
SREM key member [member ...]//将指定的元素从 set 中删除
//时间复杂度:O(N), N 是要删除的元素个数
//返回值:本次操作删除的元素个数
集合间操作
sinter
SINTER key [key ...]//获取给定 set 的交集中的元素
//时间复杂度:O(N * M), N 是最⼩的集合元素个数. M 是最⼤的集合元素个数
//返回值:交集的元素
sinterstore
SINTERSTORE destination key [key ...]//获取给定 set 的交集中的元素并保存到⽬标 set 中
//时间复杂度:O(N * M), N 是最⼩的集合元素个数. M 是最⼤的集合元素个数.
//返回值:交集的元素个数
sunion
SUNION key [key ...]//获取给定 set 的并集中的元素
//时间复杂度:O(N), N 给定的所有集合的总的元素个数.
//返回值:并集的元素
sunionstore
SUNIONSTORE destination key [key ...]//获取给定 set 的并集中的元素并保存到⽬标 set 中
//时间复杂度:O(N), N 给定的所有集合的总的元素个数.
//返回值:并集的元素个数
sdiff
SDIFF key [key ...]//获取给定 set 的差集中的元素
//时间复杂度:O(N), N 给定的所有集合的总的元素个数.
//返回值:差集的元素
sdiffstore
SDIFFSTORE destination key [key ...]//获取给定 set 的差集中的元素并保存到⽬标 set 中
//时间复杂度:O(N), N 给定的所有集合的总的元素个数.
//返回值:差集的元素个数
set的编码方式

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

  • intset(整数集合):当集合中的元素都是整数并且元素的个数小于 set-max-intset-entries 配置 (默认 512 个)时,Redis 会选用 intset 来作为集合的内部实现,从⽽减少内存的使⽤。
  • hashtable(哈希表):当集合类型无法满足 intset 的条件时,Redis 会使⽤ hashtable 作为集合 的内部实现。
  1. 当元素个数较少并且都为整数时,内部编码为 intset
  2. 当元素个数超过 512 个,内部编码为 hashtable
  3. 当存在元素不是整数时,内部编码为 hashtable
set的应用
  1. 给用户添加标签
  2. 给标签添加用户
  3. 删除用户下的标签
  4. 删除标签下的用户
  5. 计算用户的共同兴趣标签

http://www.ppmy.cn/embedded/114593.html

相关文章

283. 移动零

283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: n…

[ IDE ] SEGGER Embedded Studio for RISC-V

一、FILE 二、Edit 三、View 四、Search 五、Navigate 六、Project 七、Build 7.1 编译 先选择一个目标类型,再选择编译。 八、Debug 九、Target 十、Tools 10.1 自定义快捷键 点击菜单项,通过Tools –> Options –> Keyboard,实现自…

卸载完mathtype后,删除word加载项中的mathtype

请参考博客“卸载完mathtype后,word加载项中还是有mathtype的解决方法_怎么删除word加载项里的mathtype-CSDN博客”以及 “安装卸载MathType经验解决MathType DLL找不到的问题——超实用_mathtype dll cannot-CSDN博客” 如果在删除.dotm文件时,删不掉…

技术美术百人计划 | 《4.1 Bloom算法》笔记

1. Bloom算法介绍 1.1. Bloom效果 实际拍摄照片与游戏画面Bloom效果对比,Bloom模拟了真实世界图片的效果 Bloom流程图 1.2. 前置知识:HDR和LDR,高斯模糊 1.2.1. HDR和LDR LDR颜色范围太少,精度不够,往往会存在颜色精…

vue3.5新特性

vue在2024.09.03发布了3.5正式版本,其中包含多方面的升级和优化 性能优化 响应式系统重构优化,在内存占用、性能方面均有收益 Memory Usage Improvements Given a test case with 1000 refs 2000 computeds (1000 chained pairs) 1000 effects sub…

markdown-it:将Markdown文本转换为HTML格式,展示在页面,怎么自定义里面的a标签设置为在新标签页打开

由markdown-it将文本生成html然后渲染到页面上,但是现在你点击里面生成好的链接只能在本标签页打开,怎么将其设置为在新标签打开呢? 安装markdown-it npm install markdown-it 使用markdown-it const mdi new MarkdownIt({html: true,l…

油烟机制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

油烟机制造5G智能工厂物联数字孪生平台,是智能制造与信息技术的深度融合产物。数字孪生工业互联平台通过部署在工厂各个环节的传感器和设备,实时采集、分析和处理生产过程中的海量数据,构建出高度逼真的数字孪生模型。这一模型不仅能够真实反…

在 Mac 中设置环境变量

目录 什么是环境变量,为什么它们重要?什么是环境变量?举个例子 如何查看环境变量如何设置和修改环境变量1. 临时设置环境变量2. 永久设置环境变量3. 修改现有环境变量 环境变量在开发中的应用在 Node.js 项目中使用环境变量在 Python 项目中使…