Redis学习笔记系列(六)——基本数据类型之无序集合

5.4 集合(set)

5.4.1 SADD
  • SADD
    SADD命令用于将指定元素添加到集合中,并返回实际添加的元素个数(即不包括已经存在的元素个数)。当指定的元素在集合中已经存在时,将忽略该元素。若指定的键不存在,在执行操作前将创建一个新的空集合。
    SADD key member [member ...]
    在Redis 2.4及以上版本中,SADD命令可用于一次添加多个元素。

  • 示例

127.0.0.1:6379> SADD set a b c d
(integer) 4
127.0.0.1:6379> SMEMBERS set
1) "c"
2) "b"
3) "d"
4) "a"
5.4.2 SPOP
  • SPOP
    SPOP命令用于随机地从集合中移除并返回元素,若集合不存在则返回nil。在Redis 3.2及以上的版本中,SPOP命令支持通过count参数指定获取的元素个数。若count的值大于集合的大小,将移除并返回集合中的全部元素。
    SPOP key [count]

  • 示例

127.0.0.1:6379> SPOP set 3
1) "d"
2) "a"
3) "c"
127.0.0.1:6379> SPOP set 5
1) "b"
5.4.3 SMOVE
  • SMOVE
    SMOVE命令用于将源集合中的指定元素移至目标集合中,即将该元素从源集合中移除并在目标集合中添加,并返回1。当源集合中不存在指定的元素时,将不执行操作并返回0。
    SMOVE source destination member
    SMOVE命令具备原子性,即在执行时其它客户端的连接只会在源集合或目标集合中获取到该元素。

  • 示例

127.0.0.1:6379> SADD set a b c d
(integer) 4
127.0.0.1:6379> SMOVE set set1 a 
(integer) 1
127.0.0.1:6379> SMOVE set set1 d
(integer) 1
127.0.0.1:6379> SMOVE set set1 e
(integer) 0
127.0.0.1:6379> SMEMBERS set
1) "c"
2) "b"
127.0.0.1:6379> SMEMBERS set1
1) "d"
2) "a"
5.4.4 SMEMBERS / SISMEMBER
  • SMEMBERS
    SMEMBERS命令用于已数组的形式返回集合中的所有元素,若集合不能存在则视为空集合。
    SMEMBERS key

  • 示例

127.0.0.1:6379> SMEMBERS set1
1) "d"
2) "a"
  • SISMEMBER
    SISMEMBER命令用于指示集合中是否存在指定元素,若存在则返回1,否则返回0(若集合不存在则视为空集合,也将返回0)。
    SISMEMBER key member

  • 示例

127.0.0.1:6379> SMEMBERS set
1) "c"
2) "b"
127.0.0.1:6379> SISMEMBER set e
(integer) 0
127.0.0.1:6379> SISMEMBER set c
(integer) 1
5.4.5 SDIFF / SDIFFSTORE
  • SDIFF
    SDIFF命令用于获取指定集合(即第一个参数指定)与其它集合的差集。需要注意的是并非获取全部集合的差集,二者存在部分差异。若集合不存在将被视为空集合。
    SDIFF key [key ...]

  • 示例

127.0.0.1:6379> SADD set1 a b c d 
(integer) 4
127.0.0.1:6379> SADD set2 b d e f
(integer) 4
127.0.0.1:6379> SDIFF set1 set2
1) "c"
2) "a"
  • SDIFFSTORE
    SDIFFSTORE命令与SDIFF命令相似,区别在于SDIFFSTORE命令不直接返回其差集,而是保存到destination参数指定的集合中,并返回结果的数量。若destination参数指定的集合已存在将会被覆盖。
    SDIFFSTORE destination key [key ...]

  • 示例

127.0.0.1:6379> SDIFFSTORE set3 set1 set2
(integer) 2
127.0.0.1:6379> SMEMBERS set3
1) "c"
2) "a"
5.4.6 SUNION / SUNIONSTORE
  • SUNION
    SUNION命令用于获取指定集合的并集。若集合不存在将被视为空集合。
    SUNION key [key ...]

  • 示例

127.0.0.1:6379> SUNION set1 set2
1) "c"
2) "e"
3) "f"
4) "a"
5) "b"
6) "d"
  • SUNIONSTORE
    SUNIONSTORE命令与SUNION命令相似,区别在于SUNIONSTORE命令不直接返回其并集,而是保存到destination参数指定的集合中,并返回结果的数量。若destination参数指定的集合已存在将会被覆盖。
    SUNION key [key ...]

  • 示例

127.0.0.1:6379> SUNIONSTORE set3 set1 set2
(integer) 6
127.0.0.1:6379> SMEMBERS set3
1) "c"
2) "e"
3) "f"
4) "a"
5) "b"
6) "d"
5.4.7 SINTER / SINTERSTORE
  • SINTER
    SINTER命令用于获取指定集合的交集。当集合不存在将被视为空集合,若参数中包含空集合,返回的结果也为空(任何集合与空集合的交集为空集)。
    当只指定一个集合作为参数时,执行该命令等同于执行SMEMBERS命令。
    SINTER key [key ...]

  • 示例

127.0.0.1:6379> SINTER set1
1) "c"
2) "b"
3) "d"
4) "a"
127.0.0.1:6379> SINTER set1 set2
1) "b"
2) "d" 
  • SINTERSTORE
    SINTERSTORE命令与SINTER命令相似,区别在于SINTERSTORE命令不直接返回其交集,而是保存到destination参数指定的集合中,并返回结果的数量。若destination参数指定的集合已存在将会被覆盖。
    SINTERSTORE destination key [key ...]

  • 示例

127.0.0.1:6379> SINTERSTORE set3 set1 set2
(integer) 2
127.0.0.1:6379> SMEMBERS set3
1) "b"
2) "d"
5.4.8 SCARD

SCARD命令用于返回集合的基数(cardinality,即集合中元素的个数),若集合不存在则将返回0。
SCARD key

  • 示例
127.0.0.1:6379> SCARD set1
(integer) 4
127.0.0.1:6379> SCARD set4
(integer) 0
5.4.9 SRANDMEMBER
  • SRANDMEMBER
    SRANDMEMBERS命令用于随机获取元素,并在Redis 2.6及以上版本中支持通过count参数指定获取的元素个数。
    SRANDMEMBER key [count]
    对于count参数,不同的值将有以下几种情况:

    • 若其值为正数则随机返回集合中指定数量的元素,且所有元素不重复;
    • 若其值大于集合的大小则返回集合中的全部元素;
    • 若其值为负数,则将随机获取该值绝对值数量的元素,且可能存在重复的元素;
    • 若其值为0,则返回空数组。
  • 返回值
    当未指定count参数时:

    • 随机返回集合内的一个元素;
    • 若集合不存在则返回nil。

    当通过count参数指定获取的元素个数时:

    • 返回随机获取的元素数组;
    • 若集合不存在则返回空数组。
  • 示例

127.0.0.1:6379> SMEMBERS set1
1) "c"
2) "b"
3) "d"
4) "a"
127.0.0.1:6379> SRANDMEMBER set1 2
1) "b"
2) "c"
127.0.0.1:6379> SRANDMEMBER set1 2
1) "a"
2) "d"
127.0.0.1:6379> SRANDMEMBER set1 -3
1) "d"
2) "c"
3) "d"
127.0.0.1:6379> SRANDMEMBER set1 -3
1) "c"
2) "c"
3) "c"
127.0.0.1:6379> SRANDMEMBER set1 0
(empty array)
5.4.10 SSCAN
  • SSCAN
    SSCAN命令用于增量式的迭代获取集合中的所有元素。同样,SSCAN命令是一个基于游标cursor的迭代器,每次执行后将会返回一个新的游标,以作为下一轮迭代的游标参数。
    SSCAN key cursor [MATCH pattern] [COUNT count]

  • 示例

127.0.0.1:6379> SSCAN set1 0
1) "0"
2) 1) "c"
   2) "b"
   3) "d"
   4) "a"
5.4.11 SREM
  • SREM
    SREM命令用于移除集合中的指定元素,并返回实际移除的元素个数。当集合中不存在指定的元素时将忽略对应的移除操作;若集合不存在,则将视为空集合,并返回0。
    SREM key member [member ...]
    在Redis 2.4及以上版本中,SREM命令可用于一次移除多个元素。

  • 示例

127.0.0.1:6379> SSCAN set1 0
1) "0"
2) 1) "c"
   2) "b"
   3) "d"
   4) "a"
127.0.0.1:6379> SREM set1 a b c
(integer) 3
127.0.0.1:6379> SMEMBERS set1
1) "d"
127.0.0.1:6379> SREM set1 a b c e
(integer) 0
127.0.0.1:6379> SMEMBERS set1
1) "d"
127.0.0.1:6379> SREM set1 a b c d
(integer) 1
127.0.0.1:6379> SMEMBERS set1
(empty array) 

写在最后

如果你觉得我写的文章帮到了你,欢迎点赞、评论、分享、赞赏哦,你们的鼓励是我不断创作的动力~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350