Redis Set问题

redis的集合对象set的底层存储结构特别神奇,我估计一般人想象不到,底层使用了intset和hashtable两种数据结构存储的,intset我们可以理解为数组,hashtable就是普通的哈希表(kk为set的值,value为null)。是不是觉得用hashtable存储set是一件很神奇的事情。
set的底层存储intset和hashtable是存在编码转换的,使用intset存储必须满足下面两个条件,否则使用hashtable,条件如下:
1.结合对象保存的所有元素都是整数值
2.集合对象保存的元素数量不超过512个

Set的操作命令如下:
SADD

将一个或多个 mm 元素加入到集合 kk 当中,已经存在于集合的 mm 元素将被忽略。
假如 kk 不存在,则创建一个只包含 mm 元素作成员的集合。
当 kk 不是集合类型时,返回一个错误。

SISMEMBER

断 mm 元素是否集合 kk 的成员。
返回值
如果 mm 元素是集合的成员,返回 1 。 如果 mm 元素不是集合的成员,或 kk 不存在,返回 0

SPOP

移除并返回集合中的一个随机元素。

SRANDMEMBER

如果命令执行时,只提供了 kk 参数,那么返回集合中的一个随机元素。

SREM

移除集合 kk 中的一个或多个 mm 元素,不存在的 mm 元素会被忽略。
当 kk 不是集合类型,返回一个错误。

SMOVE

将 mm 元素从 source 集合移动到 destination 集合。
SMOVE 是原子性操作。

SCARD

返回集合 kk 的基数(集合中元素的数量)。
返回值
集合的基数。 当 kk 不存在时,返回 0

SMEMBERS

返回集合 kk 中的所有成员。
不存在的 kk 被视为空集合。
返回值
集合中的所有成员。

SINTER

返回一个集合的全部成员,该集合是所有给定集合的交集。
不存在的 kk 被视为空集。
当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。
返回值
交集成员的列表。

SINTERSTORE

如果 destination 集合已经存在,则将其覆盖。
destination 可以是 kk 本身。
返回值
结果集中的成员数量。

SUNION

返回一个集合的全部成员,该集合是所有给定集合的并集。
不存在的 kk 被视为空集。

SUNIONSTORE

如果 destination 已经存在,则将其覆盖。
destination 可以是 kk 本身。

SDIFF

返回一个集合的全部成员,该集合是所有给定集合之间的差集。
不存在的 kk 被视为空集。
返回值
一个包含差集成员的列表。

SDIFFSTORE

如果 destination 集合已经存在,则将其覆盖。
destination 可以是 kk 本身。
返回值
结果集中的元素数量。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值