redis(6) -—— set

简介

redis的set类型是string类型数值的无序集合。set元素最大可以包含2的32次方减1个元素。由于set类型是通过hash table实现(旧版本是这样,新版本不确定是不是改用了skip list来实现),所以添加/删除/查找的时间复杂度都是O(1)。hash table有个问题,就是添加或删除的时候,伴随着长度的变化的是需要同步(获取写锁)会阻塞其他读写操作。如果当前版本不是skip list(跳跃表)来实现,那么以后可能也会调整,因为sorted set中已经是使用skip list来实现的。

 命令

 1)sadd命令:往集合里添加元素,支持同时添加多个元素。

2)scard命令:获取集合元素的数量。中集合不存在则返回0,就是集合里元素个数为0。

 

 3) sismember命令:查看元素是否在集合中,在则返回1,不在集合中或者集合不存在则返回0:

4)smembers命令:获取集合的所有元素,结果是无序的:

5)srem命令:删除元素

 

srem命令支持删除多个操作,返回成功操作的元素的个数:

6)srandmember命令:随机从集合中获取一个元素,不删除元素。

7)spop命令:从集合中移除并返回随机数量的元素。

 

 8)smove命令:把元素从一个集合移动到另一个集合。原子操作。

9)sinter命令:返回给定集合之间的交集,就是共有的元素。

10)sinterstore命令:把sinter的结果存储到一个集合。

 11)sunion命令:获取指定集合的元素的并集。

 12)sunionstore命令:把sunion操作的结果存储到一个集合。

【注意】sunionstore命令,把合并的元素存储到一个目标集合中。因为集合的特性,就是集合中不会有重复的元素,那么多次重复sunionstore到同个目标集合也不碍事。

13)sdiff命令:返回给定的集合的差集,支持多个集合计算差集,返回的结果是存在于第一个集合而不在其他集合上的元素;

14)sdiffstore命令:类似sdiff命令,只是会把sdiff命令的结果存储到一个集合。

 

小结

1)注意sadd的操作结果,如果元素是存在的,那么sadd再次添加会返回0。

2)注意spop命令和srandmember命令的区别:前者会把元素从集合中移除,后者仅仅是获取随机的元素,不会移除元素。两者的共同点都是能随机获取1个或多个随机的元素。

3)集合元素数量大的时候,smembers命令会返回很多数据,性能不佳的。如果想判断元素是不是在集合里面用sismember命令,不要用smembers命令获取所有元素然后再去判断。

 

下表列出了 Redis 集合基本命令:

序号命令及描述
1SADD key member1 [member2] 向集合添加一个或多个成员
2SCARD key 获取集合的成员数
3SDIFF key1 [key2] 返回给定所有集合的差集
4SDIFFSTORE destination key1 [key2] 返回给定所有集合的差集并存储在 destination 中
5SINTER key1 [key2] 返回给定所有集合的交集
6SINTERSTORE destination key1 [key2] 返回给定所有集合的交集并存储在 destination 中
7SISMEMBER key member 判断 member 元素是否是集合 key 的成员
8SMEMBERS key 返回集合中的所有成员
9SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合
10SPOP key 移除并返回集合中的一个随机元素
11SRANDMEMBER key [count] 返回集合中一个或多个随机数
12SREM key member1 [member2] 移除集合中一个或多个成员
13SUNION key1 [key2] 返回所有给定集合的并集
14SUNIONSTORE destination key1 [key2] 所有给定集合的并集存储在 destination 集合中
15SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>