set 是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作,操作中 key 理解为集合的名字。值不能重复。
Redis 的 set 是 string 类型的无序集合。
set 元素最大可以包含(2 的 32 次方)个元素。
关于 set 集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)通过这些操作可以很容易的实现 sns 中的好友推荐和 blog 的 tag 功能。
sadd 向名称为key的set中添加元素:
sadd myset1 a
sadd myset1 b
sadd myset1 a #添加失败,已存在
smembers 查看集合:smembers myset1
srem 删除名称为key的set中的元素member:srem myset1 b
spop 随机返回并删除名称为key的set中的一个元素(用来抽奖很方便)sdiff 差集:
sdiff myset2 myset3
sdiffstore 返回差集,并将结果存为另一个 key sadd myset5 1
sadd myset5 2
sadd myset5 4
sadd myset6 2
sadd myset6 3
sdiffstore newset myset5 myset6
将只存在于 myset5,不在 myset6 中的成员,另存为 newset 中
如果已存在 newset,则先清空 newset smembers newset
结果是:
1) "1"
2) "4"
sinter 交集
sadd myset5 1
sadd myset5 2
sadd myset5 4
sadd myset6 2
sadd myset6 3
sinter myset5 myset6
返回 2
sinterstore 返回所有给定 key 的交集,并将结果存为另一个 key sinterstore newset myset5 myset6
smembers newset
结果:
1) "2"
sunion 并集
sunion myset5 myset6
sunionstore 返回所有给定 key 的并集,并将结果存为另一个 key
sunionstore newset myset5 myset6
查看结果 myset5 myset6 的并集被保存到 newset 中
smembers newset
smove移动
sadd myset7 a
sadd myset7 b
smove myset7 myset8 a
#将set7中的a ,移到myset8中
smembers myset7
smembers myset8
scard 返回名 set 集合的元素个数
scard myset5
sismember is member
测试元素是否在某一个 set 集合中 sadd myset9 a
sadd myset9 b
sismember myset9 b
sismember myset9 c
srandmember 随机返回一个名称为key的set 的一个元素,但是不删除元素
srandmember myset9
--------------------------------------------
sorted set
--------------------------------------------
sorted set 是 set 的一个升级版本,它在 set 的基础上增加了一个顺序属性, 这一属性在添加修改元素的时候可以指定,每次指定后,
zset 会自动重新按新的值调整顺序。
和 set 一样 sorted set 也是 string 类型元素的集合, 不同的是每个元素都会关联一个 double 类型的 score