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 ...] 1
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 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

SREM
•在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素则忽略 如果key集合不存在则被视为一个空的集合,该命令返回0。如果key的类型不是一个集合,则返回错误.

 SREM key member [member ...] 1
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] 1

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"
//count 为负数时可能出现重复的成员

SDIFF
•返回一个集合与给定集合的差集的元素.

SDIFF key [key ...]1
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"          //在myset1中而不在myset2中的成员
2) "a"
127.0.0.1:6379> SDIFF myset2 myset1
1) "g"          //在myset2中而不在myset1中的成员
2) "f"
127.0.0.1:6379> SDIFF myset2 myset1 myset3
1) "g"          //在myset2中而不在myset1和myset3中的成员
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 1
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"          //diffSet被覆盖

其他的参考redis官方命令文档。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值