《Redis核心原理与实战》学习笔记6——集合使用与内部实现原理

一、简介

集合类型 (Set) 是一个无序并唯一的键值集合。

集合与列表的区别:

  • 列表可以存储重复元素,集合只能存储非重复元素;
  • 列表是按照元素的先后顺序存储元素的,而集合则是无序方式存储元素的。

二、基础使用

1、添加一个或多个元素

语法:sadd key member [member …]

127.0.0.1:6379> sadd myset v1 v2 v3
(integer) 3

2、查询集合所有元素

语法:smembers key

127.0.0.1:6379> smembers myset
1) "v1"
2) "v2"
3) "v3"

3、查询集合的成员数量

语法:scard key

127.0.0.1:6379> scard myset
(integer) 3

4、查询集合中是否包含某个元素

语法:sismember key member
返回1表示包含,0表示不包含该元素

127.0.0.1:6379> sismember myset v1
(integer) 1
127.0.0.1:6379> sismember myset v4
(integer) 0

5、从一个集合中移动一个元素到另一个集合

语法:smove set1 set2 member

127.0.0.1:6379> sadd myset2 s1 s2 s3 s4
(integer) 4
127.0.0.1:6379> smove myset2 myset s4
(integer)1
127.0.0.1:6379> smembers myset
1) "v1"
2) "v3"
3) "v2"
3) "s4"

6、移除集合中一个或多个元素

语法:srem key member [member …]

127.0.0.1:6379> srem myset v1
(integer)1
127.0.0.1:6379> smembers myset
1) "s4"
2) "v3"
3) "v2"

三、内部实现

集合类型是由 intset (整数集合) 或 hashtable (普通哈希表) 组成的。当集合中所有的值都为整数时,Redis 会使用 intset 结构来存储;当集合类型以 hashtable 存储时,哈希表的 key 为要插入的元素值,而哈希表的 value 则为 Null。

四、使用场景

  • 微博关注我的人和我关注的人都适合用集合存储,可以保证人员不会重复;
  • 中奖人信息也适合用集合类型存储,这样可以保证一个人不会重复中奖。
原文地址:https://www.cnblogs.com/luckyliulin/p/13674159.html