集合
Redis 集合允许用户将任意个不相同的元素存储到集合中,这些元素既可以是文本数据,也可以是二进制数据。
基本命令
SADD
添加一个或多个元素到集合,返回添加元素的数量。
1 | -- 1 |
时间复杂度:O(n)
SREM
从集合中删除一个或多个元素,返回移除元素的数量。
1 | -- 2 |
时间复杂度:O(n)
SMOVE
将指定元素从 source 集合移动到 target 集合,返回操作结果 bool。
如果 source 或者指定元素不存在,返回 false。
如果 target 中已经有指定元素,则只会移除 source 中的元素,返回 true。
1 | -- 将 mongodb 从 databases 移动到 doc::databases 集合中, true |
时间复杂度:O(1)
SMEMBERS
获取集合中所有元素。
1 | -- mysql postgresql oracle |
时间复杂度:O(n)
SCARD
获取集合中元素的数量。
1 | -- 3 |
时间复杂度:O(1)
SISMEMBER
检查指定元素是否在集合中,返回 bool。
如果集合不存在,返回 false。
1 | -- true |
时间复杂度:O(1)
SRANDMEMBER
随机获取集合中的指定个数元素,默认为 1。
当指定个数 > SCARD 时,返回所有。
如果指定个数 < 0 时,返回指定个数绝对值。
若集合不存在,返回 nil
1 | -- 随机返回 1 个 |
时间复杂度:O(n)
SPOP
同 SRANDMEMBER,区别在于:
- 会将返回的元素从集合中移除;
- 指定元素不能为 < 0;
时间复杂度:O(n)
SINSER
返回指定集合的交集,若集合不存在,返回空。
1 | SADD s1 "a" "b" |
时间复杂度:O(n*m)
SINTERSTORE
同 SINTER,有以下区别:
- 会将指定集合的交集插入到新的集合中;
- 指定集合不存在或没有交集,则返回空,否则返回集合中元素数量;
1 | SADD s1 "a" "b" |
时间复杂度:O(n*m)
SUNION
返回指定集合的并集。
1 | SADD s1 "a" "b" |
时间复杂度:O(max(n, m))
SUNIONSTORE
同 SUNION,有以下区别:
- 会将指定集合的交集插入到新的集合中;
- 指定集合不存在或没有交集,则返回空,否则返回集合中元素数量;
1 | SADD s1 "a" "b" |
时间复杂度:O(max(n, m))
对比列表
- 列表是有序,集合无序;
- 列表可以存储重复元素,集合不行;
总结
- 集合只允许添加任意个各不相同的元素;
- 所有针对单个元素的集合操作,复杂度都为O(1);
- 集合的存储是无序的;
- SRANDMEMBER 命令 peek 一个随机选中的元素,而 SPOP 命令 pop一个随机选中的元素;
- 应该使用集合的 store 操作;