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

Redis——常用数据类型set

目录

      • 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.kler.cn/a/308286.html

相关文章:

  • 在JPA和EJB中用乐观锁解决并发问题
  • 如何判定linux系统CPU的核心架构
  • docker构建jdk11
  • Android 10 默认授权安装app运行时权限(去掉运行时所有权限授权弹窗)
  • 学习记录:js算法(九十二):克隆图
  • 【安全通信】告别信息泄露:搭建你的开源视频聊天系统briefing
  • nginx服务器安装和部署代理
  • [论文笔记] CSFCN
  • SpringSecurity原理解析(六):SecurityConfigurer 解析
  • 拖拽排序的实现示例demo
  • Mysql调优之性能监控(一)
  • C++11(5)
  • 5G毫米波阵列天线仿真——CDF计算(手动AC远场)
  • 服务器究竟该怎么防范UDP泛洪攻击?
  • 【计算机网络】TCP 协议——详解三次握手与四次挥手
  • 中秋节程序员一般在干啥?
  • 管道焊缝质量数据集——good和bad两种标签,0为good.1134个图片,有对应的xml标签和txt标签,可用于yolo训练
  • LLMs之SuperPrompt:SuperPrompt的简介、使用方法、案例应用之详细攻略
  • 初赛笔记2
  • linux使用命令行编译qt.cpp
  • 【LeetCode每日一题】——LCR 078.合并 K 个升序链表
  • SpringSecurity原理解析(八):CSRF防御解析
  • Java集合框架 迭代器
  • 麒麟操作系统搭建Nacos集群
  • 面试经典150题——最后一个单词的长度
  • 基于双向RRT算法的三维空间最优路线规划matlab仿真