已有List、Hash存储类型为何还要引入Set存储类型?
- list的底层是链表结构,链表是加快的是存储速度,但是链表本身不带有下标,当查询下标进行遍历时会有速度瓶颈
- 需要存储大量的数据,且只需要存储键,不存储值,键是唯一的
Set的用途
- 应用于同类型信息的关联搜索
- 统计网站的访问量PV、UV
List、Hash与Set的区别
List的结构
Hash的结构
Set的结构
Set类型的基本操作
新增
sadd key member1 member2 ...
获取全部数据
smembers key
删除
srem key member1 ...
获取集合数据总量(size)
scard key
判断集合中是否包含数据(contains)
sismember key member // 包含为1,不包含为0
随机获取集合中count个数据
srandmember key count
随机获取集合中count个数据并移除
spop key count
扩展操作
两个set的交集、并集、差集
sinter key1 key2 // 交集
sunion key1 key2 // 并集
sdiff key1 key2 // 差集
查找两个set的交集、并集、差集,并把结果放到指定set中
sinterstore destination key1 key2 // 求交集并放在destination中
sunionstore destination key1 key2 // 求并集并放在destination中
sdiffstore destination key1 key2 // 求差集并放在destination中
将集合中的指定数据移动到另一个集合中
smove source destination member
应用场景
记录网站访问量
- UV(页面浏览量或点击量,重复刷新页面也会记录)
用string存储模型
- PV(网站被注册的不同用户访问次数,一般使用cookie)
使用set存储模型
- IP(网站被不同ip访问的次数)
使用set存储模型