【Redis】Set

Redis set 基础操作

  • SADD adds a new member to a set.
  • SREM removes the specified member from the set.
  • SISMEMBER tests a string for set membership.
  • SINTER returns the set of members that two or more sets have in common (i.e., the intersection).
  • SCARD returns the size (a.k.a. cardinality) of a set.
    在这里插入图片描述
  • SSCAN: SSCAN key cursor [MATCH pattern] [COUNT count]
    • 指定游标查询,默认查看个数为10,可以指定个数。如果集合元素个数超过10,继续按照新游标向下查询,知道返回游标为0即查询完毕。
    • 可以使用MATCH模糊查询:SSCAN SETNUM 0 MATCH 1*

Redis set 底层实现

对象编码

INTSET 无序

  • 如果集群元素都是整数,且元素数量不超过512个,使 用INTSET编码
    在这里插入图片描述

  • 排列紧凑,内存占用少,内存友好

  • INTSET的数组默认下是int16编码,但若某个元素从int16变成int32或int64,那么所有元素的大小都变成int32或int64,会造成一定的空间浪费。

  • 查询:二分查找。因为intset是有序的,所以用二分查找已经是logN的时间复杂度,是最优解了。

HASHTABLE 有序

  • 不满足INTSET的条件时,用HASHTABLE
  • 在这里插入图片描述
  • 查找时间复杂度:O(1)

Q & A

Set是有序的吗?

Set无序,但Set有两种编码方式,分别是INTSET和HASHTABLE/
INTSET编码是有序的,HASHTABLE是无序的,但这并不影响SET是无序的。

如何查看Set所有成员

SMEMBERS

如何查看Set中成员个数?

SCARD

如何求两个Set的并集或交集?

并集:SUNION
交集:SINTER

Set编码方式是什么?

INTSET:有序,内存友好,二分查找,512个以内的整数
HASHTABLE:空间换时间,查找更快O(1)

Set为什么要用两种编码方式?

空间换时间,INTSET元素少要空间,因为元素少,就算时间复杂度高,绝对时间也不会差太多。
HASHTABLE:元素数量变大时,查找速度会更快。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuwuuu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值