从零开始Redis(六)

126 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

🍊作者简介:少年不想说话,努力长大

🍊往期回顾:从零开始Redis(五)

🍊近期目标:写完基础源码,点赞👍🏼、收藏⭐、留言📩

前面我们说过了String和list两种结构,今天我们继续其他的数据结构;

数据结构set

看到set我们首先应该想到的是我们开发的时候对应的set,它的特性是去重唯一,当我们希望Redis存储数据的时候也包含去重操作,那我们就是用set;它类似与list集合的存储;

它是String类型的无序集合,之所以不会重复,其实底层还是hash的原因,它是一个哈希字典;但是value是一个内部值,这和java的set差不多只不过java指的是一个对象,时间复杂度是O(1);

下面我们看看这个结构的用法;

我们一个一个看首先Sadd key member [member ...],它是将一个或多个member元素加入到集合key当中,已经存在于集合的member元素将被忽略;

SMEMBERS key,返回集合key中的所有member。 不存在的key被视为空集合;

127.0.0.1:6379> SADD setitem am as aa ab an aa
(integer) 5
127.0.0.1:6379> SMEMBERS setitem
1) "aa"
2) "as"
3) "am"
4) "ab"
5) "an"
127.0.0.1:6379> SMEMBERS setitems
(empty array)

再看SISMEMBER key member,判断member是否是集合key的成员,如果member是集合的元素,返回1。 如果member不是集合的元素或key不存在则返回0,

SCARD key,返回集合key中元素的个数。

判断是否存在该value-存在
127.0.0.1:6379> SISMEMBER setitem as
(integer) 1
判断是否存在该value-不存在
127.0.0.1:6379> SISMEMBER setitem aq
(integer) 0
判断是否存在该key-不存在
127.0.0.1:6379> SISMEMBER setitems aq
(integer) 0
元素个数
127.0.0.1:6379> SCARD setitem
(integer) 5

再看SREM key member [member ...],删除集合key中的一个或多个member元素,对于不存在的member元素会被忽略;返回被删除的元素个数,这个也是,元素删除完了,该key也就消失了;

SPOP key [count],将集合中的一个随机元素移除并返回,如果输入count,则会将count个随机元素移除并返回,当key不存在或 key 是空集时,返回empty array,如果我们只想返回一个随机数,但不想删除该元素,那么我们可以使用下面这个命令;

SRANDMEMBER key [count] ,(该段来源于文档)如果命令执行时,只提供了key,那么返回集合中的一个随机元素。如果count为正数且小于集合数,那么命令返回一个包含count个元素的数组,数组中的元素各不相同。如果count大于等于集合数,那么返回整个集合。 如果count为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count的绝对值。 

删除存在的元素
127.0.0.1:6379> SREM setitem as an
(integer) 2
删除不存在的元素
127.0.0.1:6379> SREM setitem at
(integer) 0
127.0.0.1:6379> SMEMBERS setitem
1) "ab"
2) "aa"
3) "am"
随机移除两个,并返回移除的元素
127.0.0.1:6379> SPOP setitem 2
1) "ab"
2) "aa"
127.0.0.1:6379> SMEMBERS setitem
1) "am"
重新set入值,再随机取
127.0.0.1:6379> SRANDMEMBER setitem 3
1) "as"
2) "ab"
3) "an"
元素个数
127.0.0.1:6379> SCARD setitem
(integer) 5

对于交集SINTER并集sunion差集sdiff这块我就不过多说了,有兴趣自行了解了解,由于我在实际项目中没用过这个set在真实生产环境做过啥,没经过实践,对于网上的应用场景就仁者见仁智者见智吧🥗🥗🥗;

结束结束,那就🛴🛴🛴

如果对你有所帮助

点个赞呗