当前位置: 首页 > 科技观察

Redis集合类型使用说明

时间:2023-03-14 23:36:52 科技观察

今天我们来学习一下Redis中的集合类型,即set集合。在Redis中,set也可以保存多个字符串。那么set集合和list链表有什么区别呢?让我们关注一下它们之间的区别。集合中的元素不能重复,但列表可以存储重复的元素。集合中的元素是无序的,而列表中的元素是有序的。集合中的元素不能通过索引下标获取,而列表中的元素可以通过索引下标获取。此外,set还支持更高级的功能,如多个集合的交集、并集、差集等。下面介绍一下set中的相关命令。命令1.集合中的操作1.添加元素saddkeymember[member...]sadd命令也是有返回值的,它的返回值是本次执行sadd命令成功添加的元素个数,因为元素重复不能保存在set中,所以执行:saddsetkeycd命令时,返回1而不是2。因为元素c已经成功保存在set中,所以不再保存,set中只能保存d。2.删除元素sremkeymember[member...]srem命令的返回值与sadd命令相同,返回值为当前删除的元素个数。3.计算元素个数。scardkeyscard命令的时间复杂度为O(1)。scard命令并没有遍历集合中的所有元素,而是直接使用Redis中的内部变量。4.判断元素是否在集合中。sismemberkeymembersismember命令也有一个返回值。如果返回值为1,则表示当前元素在当前集合中。如果返回0,则表示当前元素不在集合中。5.从集合中随机返回指定数量的元素。srandmemberkey[count]srandmember命令中有一个可选参数count。count参数是指返回元素的数量。如果当前集合中的元素个数小于count,则srandmember命令返回当前集合中的所有元素。如果count参数等于0,则不会返回任何数据。如果count参数小于0,则随机返回当前count个元素个数,与当前集合中的元素个数无关。6.从集合中随机弹出元素spopkey[count]spop命令也是从集合中随机弹出元素,同样支持count可选参数,但与srandmember命令不同。spop命令随机弹出元素后,会将弹出的元素从集合中删除,而srandmember命令不同,它只会随机弹出元素,不会从集合中删除元素。7、获取所有元素smemberskeysmembers命令可以获取当前集合中的所有元素,但是smembers命令返回的元素顺序不一定和sadd添加元素的顺序一致,也就是说存储在上述集合中的元素不是连续的。2.集合间的操作1.集合sinterkey[key...]的交集2.集合sunionkey[key...]的并集3.集合sdiffkey[key...]的差4.集合的交集,并和差的结果保存sinerstoredestinationkey[key...]sunionstoredestinationkey[key...]sdiffstoredestinationkey[key...]为什么Redis会提供命令sinterstore,sunionstore和sdiffstore来存储交,并,差套?如何保存集合的结果?这是因为Redis会花费更多的时间来执行上面的比较,所以为了提高性能,交集、并集、差集的结果可以提前保存起来,这样在需要的时候,可以直接通过smembers命令获取.我们来看看set中相关命令的时间复杂度。内部编码intset(整数集):当集合中的元素全部为整数且集合中的元素个数小于512时,Redis会选择intset作为底层内部实现。hashtable(哈希表):当不满足上述条件时,Redis会使用hashtable作为底层实现。备注:我们可以通过set-max-intset-entries参数设置上面的默认参数。下面通过一个具体的例子来验证一下我们上面提到的内部编码。1、当元素个数较少且均为整数时,内部编码为intset。2.当元素不全是整数时,内部编码为hashtable。3、当元素个数超过512时,内部编码为hashtable。以上命令就是Redis中集合相关的知识。如有不妥之处,请指出,谢谢。