1、简介
Redis中所有的的数据结构都是通过一个唯一的字符串key来获取相应的value数据。
Redis有5种基础数据结构,分别是:
- string(字符串)
- list(列表)
- hash(字典)
- set(集合)
- zset(有序集合)
其中list、set、hash、zset这四种数据结构是容器型数据结构,它们共享下面两条通用规则:
- create if not exists:容器不存在则创建
- drop if no elements:如果容器中没有元素,则立即删除容器,释放内存
本文讲述的是Redis的5种基础数据结构中的set(集合)
2、set(集合)相关介绍
2.1 set(集合)的内部结构
Redis的set(集合)相当于Java语言里的HashSet,它内部的键值对是无序的、唯一的。它的内部实现了一个所有value为null的特殊字典。
集合中的最后一个元素被移除之后,数据结构被自动删除,内存被回收。\
2.2 set(集合)的使用场景
set(集合)由于其特殊去重复的功能,我们可以用来存储活动中中奖的用户的ID,这样可以保证一个用户不会中奖两次。
3、set(集合)相关指令
sadd -> 添加集合成员,key值集合名称,member值集合元素,元素不能重复
sadd key member [member …]
127.0.0.1:6379> sadd name zhangsan
(integer) 1
127.0.0.1:6379> sadd name zhangsan # 不能重复,重复返回0
(integer) 0
127.0.0.1:6379> sadd name lisi wangwu liumazi # 支持一次添加多个元素
(integer) 3
smembers -> 查看集合中所有的元素,注意是无序的
smembers key
127.0.0.1:6379> smembers name # 无序输出集合中所有的元素
1) "lisi"
2) "wangwu"
3) "liumazi"
4) "zhangsan"
sismember -> 查询集合中是否包含某个元素
sismember key member
127.0.0.1:6379> sismember name lisi # 包含返回1
(integer) 1
127.0.0.1:6379> sismember name tianqi # 不包含返回0
(integer) 0
scard -> 获取集合的长度
scard key
127.0.0.1:6379> scard name
(integer) 4
spop -> 弹出元素,count指弹出元素的个数
spop key [count]
127.0.0.1:6379> spop name # 默认弹出一个
"wangwu"
127.0.0.1:6379> spop name 3
1) "lisi"
2) "zhangsan"
3) "liumazi"