redis set
1. 集合(string)
集合类型 (Set) 是一个无序并唯一的键值集合。它的存储顺序不会按照插入的先后顺序进行存储。 二分搜索树实现
集合类型和列表类型的区别如下:
- 列表可以存储重复元素,集合只能存储非重复元素
- 列表是按照元素的先后顺序存储元素的,而集合则是无序方式存储元素的。
一个集合最多可以存储232-1个元素。Redis除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集,合理地使用好集合类型,能在实际开发中解决很多实际问题。
2. 内部实现
集合类型的内部编码有两种:
- intset(整数集合):当集合中的元素都是整数且元素个数小于set-maxintset-entries配置(默认512个)时,Redis会选用intset来作为集合的内部实现,从而减少内存的使用。
- hashtable(哈希表):当集合类型无法满足intset的条件时,Redis会使用hashtable作为集合的内部实现。
3. 常用命令
| 命令 | 描述 |
|---|---|
| sadd key member1 [member2] | 批量添加 |
| scard key | 获取集合 |
| sdiff key1 [key2] | 集合差异。 |
| sdiffstore destination key1 [key2] | 集合差集存储在 destination |
| sinter key1 [key2] | 返回集合的交集 |
| sinterstore destination key1 [key2] | 返回集合交集存储在 destination |
| sismeber key member | 判断 member 元素是否是集合 key 的成员 |
| smembers key | 返回集合所有成员 |
| smove source destination member | 将 member 元素从 source 集合移动到 destination 集合 |
| spop key | 移除并返回随机元素 |
| sradmember key [count] | 批量返回集合中随机数 |
| srem key member1 [member2] | 批量移除 |
| sunion key1 [key2] | 返回所有集合的并集 |
| sunionstore destination key1 [key2] | 所有集合的并集存储在 destination 集合中 |
| sscan key cursor [MATCH pattern] [COUNT count] | 迭代集合元素 |
4. 使用场景
-
标签系统
集合类型比较典型的使用场景是标签(tag)
-
抽奖系统
redis集合的 SPOP(随机移除并返回集合中一个或多个元素) 和 SRANDMEMBER(随机返回集合中一个或多个元素) 命令可以帮助我们实现一个抽奖系统

浙公网安备 33010602011771号