Redis的Set结构相当于Java中的HashSet,是无序的元素集合,并且元素都是唯一的。由于Set是通过hash表实现的,所以它的增加、删除、查找操作的时间复杂度都是O(1)。最大成员个数为232-1。

SADD

最早可用版本:1.0.0

时间复杂度:每个元素的添加的时间复杂度为O(1),如果要添加N个,时间复杂度就为O(N)

用法:SADD key member [member…]

将指定的成员保存到key,如果成员已经存在,则直接忽略。如果key不存在,则先新建一个空set,再将成员添加进去。如果key存储不是一个set,则会报错。该命令执行成功后会返回实际添加成功的元素的个数。

在2.4版本之后可以支持多个参数,即一个命令添加多个成员。

SCARD

最早可用版本:1.0.0

时间复杂度:O(1)

返回key存储的set的元素个数。

SDIFF

最早可用版本:1.0.0

时间复杂度:O(N),N是所给出的元素个数的总和

返回第一个set与后面元素的差集。不存在的key都被当做空set处理。

栗子时间:

 1127.0.0.1:6379> SADD key1 a2(integer) 13127.0.0.1:6379> SADD key1 b4(integer) 15127.0.0.1:6379> SADD key1 c6(integer) 17127.0.0.1:6379> SADD key2 b8(integer) 19127.0.0.1:6379> SADD key3 c
10(integer) 1
11127.0.0.1:6379> SADD key3 d
12(integer) 1
13127.0.0.1:6379> SDIFF key1 key2 key3
141) "a"

SDIFFSTORE

最早可用版本:1.0.0

时间复杂度:O(N),N是所给出的元素个数的总和

用法:SDIFFSTORE destination key [key…]

这个命令和SDIFF命令的作用相同,但是不同的是,该命令不返回差集,而是将差集存储到destination,如果destination已经存在,就将覆盖旧值。该命令的返回值是差集中元素的个数。

SINTER

最早可用版本:1.0.0

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

返回给出的所有set的交集。我们沿用刚刚SDIFF命令中使用的三个key,给key2增加一个元素c,此时三个key存储的元素情况为

1key1={a,b,c}
2key2={b,c}
3key3={c,d}
1127.0.0.1:6379> SADD key2 c
2(integer) 1
3127.0.0.1:6379> SINTER key1 key2 key3
41) "c"

SINTERSTORE

最早可用版本:1.0.0

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

该命令与SINTER的关系就像SDIFF与SDIFFSTORE的关系一样,因此我们不过多介绍了。

SISMEMBER

最早可用版本:1.0.0

时间复杂度:O(1)

该命令用于判断某个元素是否属于指定的key,如果属于,返回1;如果不属于或者key不存在,返回0。

1127.0.0.1:6379> SADD myset "jackeyzhe"
2(integer) 1
3127.0.0.1:6379> SISMEMBER myset "jackeyzhe"
4(integer) 1
5127.0.0.1:6379> SISMEMBER myset "2018"
6(integer) 0

SMEMBERS

最早可用版本:1.0.0

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

返回指定set的全部成员,当SINTER只有一个参数时,作用与该命令相同。

SMOVE

最早可用版本:1.0.0

时间复杂度:O(1)

将成员从一个set转移到另一个set中,这个操作是原子操作。如果源set不存在,或者不包含要转移的成员,那么就不会有任何操作,直接返回0。如果转移的成员在目标set中已经存在,那么只需要将该成员从源set中删除即可。如果源set或者目标set中的一个不是set结构,那么该命令就会报错。

如果成员被成功转移,就会返回1,如果没有进行转移操作,就会返回0。

 1127.0.0.1:6379> SADD from_set "a"2(integer) 13127.0.0.1:6379> SADD from_set "b"4(integer) 15127.0.0.1:6379> SMOVE from_set to_set "a"6(integer) 17127.0.0.1:6379> SMEMBERS from_set81) "b"9127.0.0.1:6379> SMEMBERS to_set
101) "a"

SPOP

最早可用版本:1.0.0

时间复杂度:O(1)

用法:SPOP key [count]

从指定set中删除并返回一个或多个随机元素。3.2版本以后支持count参数,即可以一次返回多个元素。如果key不存在,则返回nil。

如果count大于set中元素的个数,那么该命令就会返回set中现有的所有元素。

SRANDMEMBER

最早可用版本:1.0.0

时间复杂度:当没有count参数时是O(1),否则为O(N),N为count的绝对值

该命令用于随机返回set中的元素。从2.6版本开始支持count参数,如果count是正数,则返回count个不同元素的数组;如果count是负数,则允许同一个元素多次返回。

SREM

最早可用版本:1.0.0

时间复杂度:O(N),N为指定member的个数

该命令用于从set中删除指定元素,如果不包含该元素,那么直接忽略。如果key不存在,则会当做空set处理,直接返回0。从2.4版本开始,该命令支持一次删除多个成员。

SSCAN

此命令是SCAN命令的同类,可以通过我的另一篇文章深入理解Redis的scan命令来进行更深入的了解

SUNION

最早可用版本:1.0.0

时间复杂度:O(N),N为给出的所有set的元素个数之和

返回给定set的并集。

 1127.0.0.1:6379> SMEMBERS key221) "b"32) "c"4127.0.0.1:6379> SMEMBERS key351) "d"62) "c"7127.0.0.1:6379> SUNION key2 key381) "d"92) "b"
103) "c"

SUNIONSTORE

最早可用版本:1.0.0

时间复杂度:O(N),N为给出的所有set的元素个数之和

该命令与SUNION的关系就像SDIFF与SDIFFSTORE的关系一样。

1127.0.0.1:6379> SUNIONSTORE mykey key2 key3
2(integer) 3
3127.0.0.1:6379> SMEMBERS mykey
41) "d"
52) "b"
63) "c"

往期精彩回顾

Redis命令详解:Sets相关推荐

  1. Redis命令详解:Connection

    最近在学习Redis的相关知识,上一篇我们也介绍了Redis的安装方法和基本数据结构,后面就打算开一个新的系列文章:Redis命令详解.既是对基础的巩固,也是为了以后查询起来更方便. 整个系列会分为以 ...

  2. Redis命令详解:Hashs

    Hash是一种String类型的field.value的映射表,因此,它非常适合存储对象.下面我们来一一介绍与Hash相关的命令. HDEL 最早可用版本:2.0.0 时间复杂度:O(N),其中N为要 ...

  3. redis命令详解与使用场景举例——Server(服务器)

    BGREWRITEAOF 执行一个 AOF文件 重写操作.重写会创建一个当前 AOF 文件的体积优化版本. 即使 BGREWRITEAOF 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 B ...

  4. Redis命令详解:Server

    Redis命令学习,服务器篇 BGREWRITEAOF 最早可用版本:1.0.0 使Redis重写AOF文件,重写后的AOF文件相较于当前版本的AOF文件占用的空间更小.即使重写失败,数据也不会丢失, ...

  5. Redis命令详解:Sorted Sets

    Sorted Set(也称ZSET)和Set一样也是string类型的集合,你可以将它理解为Java中SortedSet和HashMap的集合体,一方面它是一个set,保证了元素的唯一性,另一方面它给 ...

  6. Redis命令详解:HyperLogLog

    HyperLogLog是Redis的高级数据结构,它在做基数统计的时候非常有用,每个HyperLogLog的键可以计算接近264不同元素的基数,而大小只需要12KB. HyperLogLog目前只支持 ...

  7. Redis命令详解:Keys

    介绍完Redis连接相关命令后,再来介绍一下与Key相关的命令,Redis作为一个key-value数据库,对Key进行操作是无法避免的. DEL 最早可用版本1.0.0 删除指定的键值对,如果指定的 ...

  8. Redis命令详解:Cluster

    前文中我们介绍过了Redis的三种集群方案,没有了解过的同学可以自行前往.今天要介绍的Redis的亲儿子Cluster相关的命令. CLUSTER ADDSLOTS 最早可用版本:3.0.0 时间复杂 ...

  9. Redis命令详解:Geo

    Redis Geo相关命令. GEOADD 最早可用版本:3.2.0 时间复杂度:O(log(N)),N是Sorted set元素数量 用法:GEOADDkey longitude latitude ...

最新文章

  1. 【线上分享】基于AI的超分辨技术在RTC领域的技术难点与挑战
  2. TCP四种定时器--学习笔记
  3. 中配置kylin_Kylin集群模式部署(使用同一HBase存储)
  4. HTML表格(HTML 表格的使用,收藏这一篇就够了)
  5. OpenPoseDemo的用法
  6. s3c2440 IIC AT24C08
  7. erp系统实施方案会遇到哪些问题?
  8. android模仿微信浮窗,Android仿微信视屏悬浮窗效果
  9. 无锡地铁三号线列车时刻表(2020-10-22)
  10. 微信点餐小程序开发_分享微信点餐小程序可以实现哪些功能
  11. java获取当前日,当前月的开始时间和结束时间,当前季度的开始时间和结束时间
  12. android yuv加水印_Android-Camera添加水印(最简单)
  13. 特征选择(模型输入参数的分析选择)方法汇总
  14. 每周论文精读05-A2J:AnchortoJointRegressionNetwork for 3D ArticulatedPoseEstimation from a SingleDepthImage
  15. 基于国产银河飞腾多核 DSP +FPGA的图像识别硬件设计与算法实现
  16. 静态路由的配置,实现全网可达
  17. 虚拟机VMware使用U盘装系统
  18. impala 基础知识及使用
  19. 第十七届中国计量大学程序设计竞赛 D Dessert Time
  20. TS | typescript与JavaScript的异同

热门文章

  1. 关于期权行权培训的一些知识点
  2. 安装debian Linux后文字显示的全是方块数字
  3. java 面试薪资25K的 常见问题
  4. SketchUp:SketchUp草图大师软件使用技巧总结(视图操作,绘图环境优化,缩放/镜像/对齐/桌边倒圆角案例)
  5. 大众无人驾驶战略规划-图谱(有哪些大公司有无人驾驶?自动驾驶前沿)
  6. PC机怎么、如何打开、测试Html5页面图示详细说明
  7. 购买投资性房地产的7项原则
  8. 斯坦福大学李飞飞所在团队,招聘数字人体建模博士后研究员
  9. Sofia2.0项目功能问题集
  10. 基于matlab的头脑风暴优化(Brain Storm Optimization Algorithm,BSO)的多目标优化仿真