Redis 学习笔记(六)之 set无序集合
1. 介绍
一个集合类型可以存储最多2^32 -1 个字符串集合类型在redis内部使用值为空的散列表(hash table)实现,所以集合中的加入或删除元素等时间复杂度为O(1)。集合具有元素唯一性。
set集合命令
SADD
添加一个或多个指定的member元素到集合的 key中.指定的一个或者多个元素member 如果已经在集合key中存在则忽略.如果集合key 不存在,则新建集合key,并添加member元素到集合key中.如果key 的类型不是集合则返回错误.
SADD key member [member
...]
127.0.0.1:
6379> SADD myset1
"hello"
(
integer)
1
127.0.0.1:
6379> SADD myset1
"hello"
(
integer)
0
127.0.0.1:
6379> SADD myset1
"hello" "world"
(
integer)
1
SMEMBERS
返回key集合所有的元素。该命令的作用与使用一个参数的SINTER 命令作用相同。
SMEMBERS
key
127.0.0.1:
6379> SMEMBERS myset1
1)
"world"
2)
"hello"
127.0.0.1:
6379> SMEMBERS myset2
(
empty list or set)
SISMEMBER
返回成员 member 是否是存储的集合 key的成员.
SISMEMBER key
member
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
SREM
在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素则忽略 如果key集合不存在则被视为一个空的集合,该命令返回0。如果key的类型不是一个集合,则返回错误.
SREM key member [member
...]
127.0.0.1:
6379> SREM myset1 hello world
(
integer)
2
127.0.0.1:
6379> SMEMBERS myset1
(
empty list
or set)
SPOP
随机删除并返回集合中的若干元素
SPOP key [count]
127.0.0.1:
6379> SADD myset1
a b c d e f g h
(
integer)
8
127.0.0.1:
6379> SPOP myset1
4
1)
"e"
2)
"c"
3)
"d"
4)
"f"
127.0.0.1:
6379> SMEMBERS myset1
1)
"h"
2)
"g"
3)
"b"
4)
"a"
SRANDMEMBER
随机返回key集合中的若干元素。接受 count 参数,如果count是整数且小于元素的个数,返回含有 count 个不同的元素的数组,如果count是个整数且大于集合中元素的个数时,仅返回整个集合的所有元素,当count是负数,则会返回一个包含count的绝对值的个数元素的数组,如果count的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况。提供key参数时,该命令作用类似于SPOP命令, 不同的是SPOP命令会将被选择的随机元素从集合中移除, 而SRANDMEMBER仅仅是返回该随记元素,而不做任何操作。
SRANDMEMBER key [count]
127.0.0.1:
6379> SRANDMEMBER myset1
"d"
127.0.0.1:
6379> SRANDMEMBER myset1
4
1)
"c"
2)
"h"
3)
"b"
4)
"a"
127.0.0.1:
6379> SRANDMEMBER myset1 -
4
1)
"f"
2)
"a"
3)
"h"
4)
"h"
SDIFF
返回一个集合与给定集合的差集的元素.
SDIFF key [key
...]
127.0.0.1:
6379> SADD myset1
a b c d e
(
integer)
5
127.0.0.1:
6379> SADD myset2 c b e f g
(
integer)
5
127.0.0.1:
6379> SADD myset3 h i
a b
(
integer)
4
127.0.0.1:
6379> SDIFF myset1 myset2
1)
"d"
2)
"a"
127.0.0.1:
6379> SDIFF myset2 myset1
1)
"g"
2)
"f"
127.0.0.1:
6379> SDIFF myset2 myset1 myset3
1)
"g"
2)
"f"
SINTER
返回指定所有的集合的成员的交集。
SINTER key [key
...]
127.0.
0.1:
6379> SINTER myset1 myset2
1)
"e"
2)
"c"
3)
"b"
127.0.
0.1:
6379> SINTER myset1 myset2 myset3
1)
"b"
-SUNION - 返回给定的多个集合的并集中的所有成员.
SUNION key [key
...]
127.0.
0.1:
6379> SUNION myset1 myset2 myset3
1)
"c"
2)
"g"
3)
"b"
4)
"f"
5)
"a"
6)
"i"
7)
"e"
8)
"d"
9)
"h"
SCARD
返回集合存储的key的基数 (集合元素的数量).
SCARD
key
127
.0.0.1:6379>
SCARD myset1
(
integer) 5
127
.0.0.1:6379>
SCARD myset2
(
integer) 5
127
.0.0.1:6379>
SCARD myset3
(
integer) 4
SDIFFSTORE
该命令类似于 SDIFF, 不同之处在于该命令不返回结果集,而是将结果存放在destination集合中.如果destination已经存在, 则将其覆盖重写.
SDIFFSTORE destination key [key
...]
127.0.0.1:
6379> SDIFFSTORE diffSet myset1 myset2
(
integer)
2
127.0.0.1:
6379> SMEMBERS diffSet
1)
"d"
2)
"a"
127.0.0.1:
6379> SDIFFSTORE diffSet myset1 myset2 myset3
(
integer)
1
127.0.0.1:
6379> SMEMBERS diffSet
1)
"d"
SINTERSTORE
这个命令与SINTER命令类似, 但是它并不是直接返回结果集,而是将结果保存在 destination集合中.如果destination 集合存在, 则会被重写.
SINTERSTORE destination key [key
...]
127.0.0.1:
6379> SINTERSTORE diffSet myset1 myset2
(
integer)
3
127.0.0.1:
6379> SMEMBERS diffSet
1)
"e"
2)
"b"
3)
"c"
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
127.0.0.1:
6379> SMOVE myset1 myset2 d
(
integer)
1
127.0.0.1:
6379> SISMEMBER myset2 d
(
integer)
1
127.0.0.1:
6379> SISMEMBER myset1 d
(
integer)
0
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
转载请注明原文地址: https://ju.6miu.com/read-40884.html