Redis Set

作者: 狗语 | 来源:发表于2019-01-01 17:59 被阅读0次

    介绍

    set 是无序集合,最大可以包含(2 的 32 次方-1)个元素。set 的是通过 hash table 实现的,所以添加,删除,查找的复杂度都是 O(1)。hash table 会随着添加或者删除自动的调整大小。需要注意的是调整 hash table 大小时候需要同步(获取写锁)会阻塞其他读写操作。可能不久后就会改用跳表(skip list)来实现。hash table 会随着添加或者删除自动的调整大小。需要注意的是调整 hash table 大小时候需要同步(获取写锁)会阻塞其他读写操作。可能不久后就会改用跳表(skip list)来实现。

    REDIS_SET (集 合) 是 SADD 、 SRANDMEMBER 等 命 令 的 操 作 对 象, REDIS_ENCODING_INTSET 和 REDIS_ENCODING_HT 两种方式编码:

    第一个添加到集合的元素,决定了创建集合时所使用的编码:如果第一个元素可以表示为 long long 类型值(也即是,它是一个整数),那么集合的初始编码为 REDIS_ENCODING_INTSET 。否则,集合的初始编码为 REDIS_ENCODING_HT 。

    如果一个集合使用 REDIS_ENCODING_INTSET 编码,那么当以下任何一个条件被满足时,这个集合会被转换成 REDIS_ENCODING_HT 编码:intset 保存的整数值个数超过 server.set_max_intset_entries (默认值为 512 )。试图往集合里添加一个新元素,并且这个元素不能被表示为 long long 类型(也即是,它不是一个整数)。

    指令

    SADD key member [member ...]

    将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。

    假如 key 不存在,则创建一个只包含 member 元素作成员的集合。

    当 key 不是集合类型时,返回一个错误。

    SREM key member [member ...]

    移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。

    当 key 不是集合类型,返回一个错误。

    SPOP key

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

    如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用 SRANDMEMBER 命令。

    SRANDMEMBER key [count]

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

    从 Redis 2.6 版本开始, SRANDMEMBER 命令接受可选的 count 参数:

    如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。

    如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

    该操作和 SPOP 相似,但 SPOP 将随机元素从集合中移除并返回,而 SRANDMEMBER 则仅仅返回随机元素,而不对集合进行任何改动。

    SDIFF key [key ...]

    返回一个集合的全部成员,该集合是所有给定集合之间的差集(集合之间不同的元素)。

    不存在的 key 被视为空集。

    SDIFFSTORE destination key [key ...]

    这个命令的作用和 SDIFF 类似,但它将结果保存到 destination 集合,而不是简单地返回结果集。

    如果 destination 集合已经存在,则将其覆盖。

    destination 可以是 key 本身。

    SMEMBERS key

    返回集合 key 中的所有成员。

    不存在的 key 被视为空集合。

    SINTER key [key ...]

    返回一个集合的全部成员,该集合是所有给定集合的交集。

    不存在的 key 被视为空集。

    当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。

    SINTERSTORE destination key [key ...]

    这个命令类似于 SINTER 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。

    如果 destination 集合已经存在,则将其覆盖。

    destination 可以是 key 本身。

    SUNION key [key ...]

    返回一个集合的全部成员,该集合是所有给定集合的并集。

    不存在的 key 被视为空集。

    SUNIONSTORE destination key [key ...]

    这个命令类似于 SUNION 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。

    如果 destination 已经存在,则将其覆盖。

    destination 可以是 key 本身。

    SCARD key

    返回集合 key 的基数(集合中元素的数量)。

    SMOVE source destination member

    将 member 元素从 source 集合移动到 destination 集合。

    SMOVE 是原子性操作。

    如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。

    当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。

    当 source 或 destination 不是集合类型时,返回一个错误。

    SISMEMBER key member

    判断 member 元素是否集合 key 的成员。

    SSCAN key cursor [MATCH pattern] [COUNT count]

    增量式迭代命令并不保证每次执行都返回某个给定数量的元素。增量式命令甚至可能会返回零个元素, 但只要命令返回的游标不是 0 , 应用程序就不应该将迭代视作结束。

    COUNT:虽然增量式迭代命令不保证每次迭代所返回的元素数量, 但我们可以使用 COUNT 选项, 对命令的行为进行一定程度上的调整。基本上, COUNT 选项的作用就是让用户告知迭代命令, 在每次迭代中应该从数据集里返回多少元素。虽然 COUNT 选项只是对增量式迭代命令的一种提示(hint), 但是在大多数情况下, 这种提示都是有效的。

    MATCH:和 KEYS 命令一样, 增量式迭代命令也可以通过提供一个 glob 风格的模式参数, 让命令只返回和给定模式相匹配的元素, 这一点可以通过在执行增量式迭代命令时, 通过给定 MATCH <pattern> 参数来实现。

    相关文章

      网友评论

          本文标题:Redis Set

          本文链接:https://www.haomeiwen.com/subject/shonlqtx.html