redis基本数据类型(set集合)
- set集合
-
- 存储类型
- 常用操作命令
-
- sadd:添加元素到指定key的集合
- scard:获取集合元素的数量
- sdiff:返回一个集合与给定集合的差集的元素.
- sdiffstore:将一个集合与给定集合差集的元素存入另一个集合中
- sinter:获取指定集合的交集
- sinterstore:将指定集合的交集存入另一个集合
- sismember:判断集合中是否含有指定元素
- smembers:获取集合所有元素
- smove:从一个集合移动指定元素到另一个集合
- spop:随机从集合中移除指定个数的元素
- srandmember:随机从集合中查询指定个数的元素
- rpoplpush:将一个列表的尾部元素放到另一个列表的头部
- srem:移除集合中指定的元素
- sunion:获取指定集合的并集
- sunionstore:将指定集合的并集存储在另一个集合中
set集合
存储类型
存储string类型的无序集合,最大存储数量2^32-1(40亿左右)
常用操作命令
sadd:添加元素到指定key的集合
-
命令
SADD key member [member ...]
-
说明
添加一个或多个指定的member元素到集合的 key中.指定的一个或者多个元素member 如果已经在集合key中存在则忽略.如果集合key 不存在,则新建集合key,并添加member元素到集合key中.
如果key 的类型不是集合则返回错误.
-
返回值
返回新成功添加到集合里元素的数量,不包括已经存在于集合中的元素.
-
例子
redis> SADD myset "Hello" (integer) 1 redis> SADD myset "World" (integer) 1 redis> SADD myset "World" (integer) 0 redis> SMEMBERS myset 1) "World" 2) "Hello" redis>
scard:获取集合元素的数量
-
命令
扫描二维码关注公众号,回复: 13010155 查看本文章SCARD key
-
说明
返回集合存储的key的基数 (集合元素的数量).
-
返回值
集合的基数(元素的数量),如果key不存在,则返回 0.
-
例子
redis> SADD myset "Hello" (integer) 1 redis> SADD myset "World" (integer) 1 redis> SCARD myset (integer) 2 redis>
sdiff:返回一个集合与给定集合的差集的元素.
-
命令
SDIFF key [key ...]
-
返回值
结果集的元素
-
例子
redis> SADD key1 "a" (integer) 1 redis> SADD key1 "b" (integer) 1 redis> SADD key1 "c" (integer) 1 redis> SADD key2 "c" (integer) 1 redis> SADD key2 "d" (integer) 1 redis> SADD key2 "e" (integer) 1 redis> SDIFF key1 key2 1) "a" 2) "b" redis>
sdiffstore:将一个集合与给定集合差集的元素存入另一个集合中
-
命令
SDIFFSTORE destination key [key ...]
-
返回值
该命令类似于 SDIFF, 不同之处在于该命令不返回结果集,而是将结果存放在
destination
集合中.如果
destination
已经存在, 则将其覆盖重写. -
例子
redis> SADD key1 "a" (integer) 1 redis> SADD key1 "b" (integer) 1 redis> SADD key1 "c" (integer) 1 redis> SADD key2 "c" (integer) 1 redis> SADD key2 "d" (integer) 1 redis> SADD key2 "e" (integer) 1 redis> SDIFFSTORE key key1 key2 (integer) 2 redis> SMEMBERS key 1) "b" 2) "a" redis>
sinter:获取指定集合的交集
-
命令
SINTER key [key ...]
-
说明
如果key不存在则被认为是一个空的集合,当给定的集合为空的时候,结果也为空.(一个集合为空,结果一直为空).
-
返回值
结果集成员的列表.
-
例子
redis> SADD key1 "a" (integer) 1 redis> SADD key1 "b" (integer) 1 redis> SADD key1 "c" (integer) 1 redis> SADD key2 "c" (integer) 1 redis> SADD key2 "d" (integer) 1 redis> SADD key2 "e" (integer) 1 redis> SINTER key1 key2 1) "c" redis>
sinterstore:将指定集合的交集存入另一个集合
-
命令
SINTERSTORE destination key [key ...]
-
说明
这个命令与
SINTER
命令类似, 但是它并不是直接返回结果集,而是将结果保存在 destination集合中.如果destination 集合存在, 则会被重写.
-
返回值
结果集中成员的个数.
-
例子
redis> SADD key1 "a" (integer) 1 redis> SADD key1 "b" (integer) 1 redis> SADD key1 "c" (integer) 1 redis> SADD key2 "c" (integer) 1 redis> SADD key2 "d" (integer) 1 redis> SADD key2 "e" (integer) 1 redis> SINTERSTORE key key1 key2 (integer) 1 redis> SMEMBERS key 1) "c" redis>
sismember:判断集合中是否含有指定元素
-
命令
SISMEMBER key member
-
说明
返回成员 member 是否是存储的集合 key的成员.
-
返回值
- 1–member元素是集合key的成员
- 0-member元素不是key的成员,或者集合key不存在
-
例子
redis> SADD myset "one" (integer) 1 redis> SISMEMBER myset "one" (integer) 1 redis> SISMEMBER myset "two" (integer) 0 redis>
smembers:获取集合所有元素
-
命令
SMEMBERS key
-
说明
返回key集合所有的元素.
该命令的作用与使用一个参数的
SINTER
命令作用相同. -
返回值
集合中的所有元素.
-
例子
redis> SADD myset "Hello" (integer) 1 redis> SADD myset "World" (integer) 1 redis> SMEMBERS myset 1) "World" 2) "Hello" redis>
smove:从一个集合移动指定元素到另一个集合
-
命令
SMOVE source destination member
-
说明
将member从source集合移动到destination集合中. 对于其他的客户端,在特定的时间元素将会作为source或者destination集合的成员出现.
如果source 集合不存在或者不包含指定的元素,这smove命令不执行任何操作并且返回0.否则对象将会从source集合中移除,并添加到destination集合中去,如果destination集合已经存在该元素,则smove命令仅将该元素充source集合中移除. 如果source 和destination不是集合类型,则返回错误.
-
返回值
- 1–该元素成功移除1
- 0–该元素不是 source集合成员,无任何操作
-
例子
redis> SADD myset "one" (integer) 1 redis> SADD myset "two" (integer) 1 redis> SADD myotherset "three" (integer) 1 redis> SMOVE myset myotherset "two" (integer) 1 redis> SMEMBERS myset 1) "one" redis> SMEMBERS myotherset 1) "three" 2) "two" redis>
spop:随机从集合中移除指定个数的元素
-
命令
SPOP key [count]
-
说明
从存储在
key
的集合中移除并返回一个或多个随机元素。count
参数将在更高版本中提供,但是在2.6、2.8、3.0中不可用。 -
例子
redis> SADD myset "one" (integer) 1 redis> SADD myset "two" (integer) 1 redis> SADD myset "three" (integer) 1 redis> SPOP myset 1) "three" redis> SMEMBERS myset 1) "one" 2) "two" redis> SADD myset "four" (integer) 1 redis> SADD myset "five" (integer) 1 redis> SPOP myset 3 1) "one" 2) "four" 3) "two" redis> SMEMBERS myset 1) "five"
srandmember:随机从集合中查询指定个数的元素
-
命令
SRANDMEMBER key [count]
-
说明
仅提供key参数,那么随机返回key集合中的一个元素.
Redis 2.6开始,可以接受 count 参数,如果count是整数且小于元素的个数,返回含有 count 个不同的元素的数组,如果count是个整数且大于集合中元素的个数时,仅返回整个集合的所有元素,当count是负数,则会返回一个包含count的绝对值的个数元素的数组,如果count的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况.
仅提供key参数时,该命令作用类似于SPOP命令,不同的是SPOP命令会将被选择的随机元素从集合中移除,而SRANDMEMBER仅仅是返回该随记元素,而不做任何操作.
-
返回值
不使用count 参数的情况下该命令返回随机的元素,如果key不存在则返回nil。
使用count参数,则返回一个随机的元素数组,如果key不存在则返回一个空的数组。
-
例子
redis> SADD myset one two three (integer) 3 redis> SRANDMEMBER myset "one" redis> SRANDMEMBER myset 2 1) "three" 2) "one" redis> SRANDMEMBER myset -5 1) "one" 2) "one" 3) "one" 4) "one" 5) "one" redis>
rpoplpush:将一个列表的尾部元素放到另一个列表的头部
-
命令
RPOPLPUSH source destination
-
说明
原子性地返回并移除存储在 source 的列表的最后一个元素(列表尾部元素), 并把该元素放入存储在 destination 的列表的第一个元素位置(列表头部)。
例如:假设 source 存储着列表 a,b,c, destination存储着列表 x,y,z。 执行 RPOPLPUSH 得到的结果是 source 保存着列表 a,b ,而 destination 保存着列表 c,x,y,z。
如果 source 不存在,那么会返回 nil 值,并且不会执行任何操作。 如果 source 和 destination 是同样的,那么这个操作等同于移除列表最后一个元素并且把该元素放在列表头部, 所以这个命令也可以当作是一个旋转列表的命令。
-
返回值
被移除和放入的元素
-
例子
redis> RPUSH mylist "one" (integer) 1 redis> RPUSH mylist "two" (integer) 2 redis> RPUSH mylist "three" (integer) 3 redis> RPOPLPUSH mylist myotherlist "three" redis> LRANGE mylist 0 -1 1) "one" 2) "two" redis> LRANGE myotherlist 0 -1 1) "three" redis>
srem:移除集合中指定的元素
-
命令
SREM key member [member ...]
-
说明
在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素则忽略 如果key集合不存在则被视为一个空的集合,该命令返回0.
如果key的类型不是一个集合,则返回错误.
-
返回值
从集合中移除元素的个数,不包括不存在的成员.
-
例子
redis> SADD myset "one" (integer) 1 redis> SADD myset "two" (integer) 1 redis> SADD myset "three" (integer) 1 redis> SREM myset "one" (integer) 1 redis> SREM myset "four" (integer) 0 redis> SMEMBERS myset 1) "three" 2) "two" redis>
sunion:获取指定集合的并集
-
命令
SUNION key [key ...]
-
说明
返回给定的多个集合的并集中的所有成员.
不存在的key可以认为是空的集合.
-
例子
redis> SADD key1 "a" (integer) 1 redis> SADD key1 "b" (integer) 1 redis> SADD key1 "c" (integer) 1 redis> SADD key2 "c" (integer) 1 redis> SADD key2 "d" (integer) 1 redis> SADD key2 "e" (integer) 1 redis> SUNION key1 key2 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" redis>
sunionstore:将指定集合的并集存储在另一个集合中
-
命令
SUNIONSTORE destination key [key ...]
-
说明
该命令作用类似于SUNION命令,不同的是它并不返回结果集,而是将结果存储在destination集合中.
如果destination 已经存在,则将其覆盖.
-
返回值
结果集中元素的个数.
-
例子
redis> SADD key1 "a" (integer) 1 redis> SADD key1 "b" (integer) 1 redis> SADD key1 "c" (integer) 1 redis> SADD key2 "c" (integer) 1 redis> SADD key2 "d" (integer) 1 redis> SADD key2 "e" (integer) 1 redis> SUNIONSTORE key key1 key2 (integer) 5 redis> SMEMBERS key 1) "c" 2) "e" 3) "b" 4) "a" 5) "d" redis>