Redis 学习笔记(六)之 set无序集合

来源:互联网 时间:2017-11-17

转自:http://blog.csdn.net/men_wen/article/details/61916268

1. 介绍

  • 一个集合类型可以存储最多2^32 -1 个字符串
  • 集合类型在redis内部使用值为空的散列表(hash table)实现,所以集合中的加入或删除元素等时间复杂度为O(1)。
  • 集合具有元素唯一性。

set集合命令

  • SADD 
    • 添加一个或多个指定的member元素到集合的 key中.指定的一个或者多个元素member 如果已经在集合key中存在则忽略.如果集合key 不存在,则新建集合key,并添加member元素到集合key中.
    • 如果key 的类型不是集合则返回错误.
 SADD key member [member ...] 
  • 1
127.0.0.1:6379> SADD myset1 "hello" (integer) 1127.0.0.1:6379> SADD myset1 "hello" (integer) 0 //添加失败127.0.0.1:6379> SADD myset1 "hello" "world"(integer) 1 //只添加成功一个
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • SMEMBERS 
    • 返回key集合所有的元素。该命令的作用与使用一个参数的SINTER 命令作用相同。
 SMEMBERS key 
  • 1
127.0.0.1:6379> SMEMBERS myset11) "world"2) "hello"127.0.0.1:6379> SMEMBERS myset2(empty list or set)
  • 1
  • 2
  • 3
  • 4
  • 5
  • SISMEMBER 
    • 返回成员 member 是否是存储的集合 key的成员.
 SISMEMBER key member 
  • 1
127.0.0.1:6379> SISMEMBER myset hello(integer) 0 //不存在集合127.0.0.1:6379> SISMEMBER myset1 hellos(integer) 0 //不存在成员127.0.0.1:6379> SISMEMBER myset1 hello(integer) 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • SREM 
    • 在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素则忽略 如果key集合不存在则被视为一个空的集合,该命令返回0。如果key的类型不是一个集合,则返回错误.
 SREM key member [member ...] 
  • 1
127.0.0.1:6379> SREM myset1 hello world(integer) 2127.0.0.1:6379> SMEMBERS myset1(empty list or set)
  • 1
  • 2
  • 3
  • 4
  • SPOP 
    • 随机删除并返回集合中的若干元素
 SPOP key [count] 
  • 1
127.0.0.1:6379> SADD myset1 a b c d e f g h (integer) 8127.0.0.1:6379> SPOP myset1 41) "e"2) "c"3) "d"4) "f"127.0.0.1:6379> SMEMBERS myset11) "h"2) "g"3) "b"4) "a"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • SRANDMEMBER 
    • 随机返回key集合中的若干元素。
    • 接受 count 参数,如果count是整数且小于元素的个数,返回含有 count 个不同的元素的数组,如果count是个整数且大于集合中元素的个数时,仅返回整个集合的所有元素,当count是负数,则会返回一个包含count的绝对值的个数元素的数组,如果count的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况。
    • 提供key参数时,该命令作用类似于SPOP命令, 不同的是SPOP命令会将被选择的随机元素从集合中移除, 而SRANDMEMBER仅仅是返回该随记元素,而不做任何操作。
 SRANDMEMBER key [count] 
  • 1
127.0.0.1:6379> SRANDMEMBER myset1 "d"127.0.0.1:6379> SRANDMEMBER myset1 41) "c"2) "h"3) "b"4) "a"127.0.0.1:6379> SRANDMEMBER myset1 -41) "f"2) "a"3) "h"4) "h"//count 为负数时可能出现重复的成员
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • SDIFF 
    • 返回一个集合与给定集合的差集的元素.
SDIFF key [key ...]
  • 1
127.0.0.1:6379> SADD myset1 a b c d e(integer) 5127.0.0.1:6379> SADD myset2 c b e f g(integer) 5127.0.0.1:6379> SADD myset3 h i a b(integer) 4127.0.0.1:6379> SDIFF myset1 myset21) "d" //在myset1中而不在myset2中的成员2) "a"127.0.0.1:6379> SDIFF myset2 myset11) "g" //在myset2中而不在myset1中的成员2) "f"127.0.0.1:6379> SDIFF myset2 myset1 myset31) "g" //在myset2中而不在myset1和myset3中的成员2) "f"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • SINTER 
    • 返回指定所有的集合的成员的交集。
 SINTER key [key ...] 
  • 1
127.0.0.1:6379> SINTER myset1 myset2 1) "e"2) "c"3) "b"127.0.0.1:6379> SINTER myset1 myset2 myset31) "b"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

-SUNION 
- 返回给定的多个集合的并集中的所有成员.

 SUNION key [key ...] 
  • 1
127.0.0.1:6379> SUNION myset1 myset2 myset31) "c"2) "g"3) "b"4) "f"5) "a"6) "i"7) "e"8) "d"9) "h"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • SCARD 
    • 返回集合存储的key的基数 (集合元素的数量).
 SCARD key 
  • 1
127.0.0.1:6379> SCARD myset1(integer) 5127.0.0.1:6379> SCARD myset2(integer) 5127.0.0.1:6379> SCARD myset3(integer) 4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • SDIFFSTORE 
    • 该命令类似于 SDIFF, 不同之处在于该命令不返回结果集,而是将结果存放在destination集合中.
    • 如果destination已经存在, 则将其覆盖重写.
 SDIFFSTORE destination key [key ...] 
  • 1
127.0.0.1:6379> SDIFFSTORE diffSet myset1 myset2(integer) 2127.0.0.1:6379> SMEMBERS diffSet1) "d"2) "a"127.0.0.1:6379> SDIFFSTORE diffSet myset1 myset2 myset3(integer) 1127.0.0.1:6379> SMEMBERS diffSet1) "d" //diffSet被覆盖
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • SINTERSTORE 
    • 这个命令与SINTER命令类似, 但是它并不是直接返回结果集,而是将结果保存在 destination集合中.
    • 如果destination 集合存在, 则会被重写.
 SINTERSTORE destination key [key ...] 
  • 1
127.0.0.1:6379> SINTERSTORE diffSet myset1 myset2(integer) 3127.0.0.1:6379> SMEMBERS diffSet1) "e"2) "b"3) "c"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • SUNIONSTORE 
    • 该命令作用类似于SUNION命令,不同的是它并不返回结果集,而是将结果存储在destination集合中.
    • 如果destination 已经存在,则将其覆盖. 

      SUNIONSTORE destination key [key ...] 


      127.0.0.1:6379> SUNIONSTORE diffSet myset1 myset2 
      (integer) 7 
      127.0.0.1:6379> SMEMBERS diffSet 
      1) "e" 
      2) "d" 
      3) "c" 
      4) "g" 
      5) "b" 
      6) "f" 
      7) "a" 
    • SMOVE
    • 将member从source集合移动到destination集合中.
    • 如果source 集合不存在或者不包含指定的元素,这smove命令不执行任何操作并且返回0.否则对象将会从source集合中移除,并添加到destination集合中去,如果destination集合已经存在该元素,则smove命令仅将该元素充source集合中移除. 如果source 和destination不是集合类型,则返回错误.
 SMOVE source destination member 
  • 1
127.0.0.1:6379> SMOVE myset1 myset2 d(integer) 1127.0.0.1:6379> SISMEMBER myset2 d(integer) 1127.0.0.1:6379> SISMEMBER myset1 d(integer) 0//destination集合已经存在该元素,则smove命令仅将该元素充source集合中移除127.0.0.1:6379> SISMEMBER diffSet d(integer) 1 127.0.0.1:6379> SMOVE diffSet myset2 d(integer) 1 127.0.0.1:6379> SISMEMBER diffSet d(integer) 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

相关阅读:
Top