Redis学习笔记 ——(5)集合的用法、内部编码、使用场景
集合类型可以用来保存多个字符串元素,但是和列表类型不一样的是,集合中不允许有重复元素,并且集合的元素是无序的,不能通过索引下标获取元素。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
命令
- SADD key member1 [member2]
向集合添加一个或多个成员 - SCARD key
获取集合的成员数 - SDIFF key1 [key2]
返回第一个集合与其他集合之间的差异。 - SDIFFSTORE destination key1 [key2]
返回给定所有集合的差集并存储在 destination 中 - SINTER key1 [key2]
返回给定所有集合的交集 - SINTERSTORE destination key1 [key2]
返回给定所有集合的交集并存储在 destination 中 - SISMEMBER key member
判断 member 元素是否是集合 key 的成员 - SMEMBERS key
返回集合中的所有成员 - SMOVE source destination member
将 member 元素从 source 集合移动到 destination 集合 - SPOP key
移除并返回集合中的一个随机元素 - SRANDMEMBER key [count]
返回集合中一个或多个随机数 - SREM key member1 [member2]
移除集合中一个或多个成员 - SUNION key1 [key2]
返回所有给定集合的并集 - SUNIONSTORE destination key1 [key2]
所有给定集合的并集存储在 destination 集合中 - SSCAN key cursor [MATCH pattern] [COUNT count]
迭代集合中的元素
集合间的操作
- 求多个集合的交集
sinter key [key] - 求多个集合的并集
suinon key [KEY] - 求多个集合的差集
sdiff key [KEY] - 将交集、并集、差集的结果保存
sinterstore destination key [KEY]
suionstore destination key [KEY]
sdiffstore destination key [KEY]
集合间的运算在元素较多的情况下会比较耗时,因此Redis提供了上面三个命令将结果保存在desination key中。
内部编码
集合类型的内部编码有两种
- intset
整数集合,当集合中的元素都是整数,且元素个数小于默认512个时,会默认采用inset作为内部编码 - hashtable
哈希表,当集合类型无法满足intset的条件时,会采用hashtable作为集合的内部实现。
使用场景
集合类型比较经典的使用场景是标签,例如一个用户可能娱乐、体育比较感兴趣,另一个用户可能对历史、新闻比较感兴趣,这些兴趣就是标签,有了这些数据就可以得到喜欢同一个标签的人以及用户的共同喜好的标签,这些数据对于用户体验一级增强用户黏度比较重要。