redis数据类型(五)set类型
一、 set类型
set是无序集合,最大可以包含(2 的 32 次方-1)个元素。
set 的是通过 hash table 实现的,所以添加,删除,查找的复杂度都是 O(1)。
hash table 会随着添加或者删除自动的调整大小。需要注意的是调整 hash table 大小时候需要同步(获取写锁)会阻塞其他读写操作。可能不久后就会改用跳表(skip list)来实现。跳表已经在 sorted sets 中使用了。
关于 set 集合类型除了基本的添加删除操作,其它有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。
通过这些操作可以很容易的实现 SNS 中的好友推荐和 blog 的 tag 功能。
二、set类型数据操作指令简介
- sadd key member 添加一个string元素到key对应set集合中,成功返回1,如果元素已经在集合中则返回0,key对应的set不存在则返回错误。
- srem key member 从key对应set中移除指定元素,成功返回1,如果member在集合中不存在或者key不存在返回0,如果key对应的不是set类型的值返回错误。
- spop key 删除并返回key对应set中随机的一个元素,如果set是空或者key不存在返回空串。
- srandmember key 同spop,随机取set中的一个元素,但是不删除元素。
- smove srckey dstkey member 从srckey对应set中移除member并添加到dstkey对应set中,整个操作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key不是set 类型返回错误。
- scard key 返回set的元素个数,如果set是空或者key不存在返回0。
- sismember key member 判断member是否在set中,存在返回1,0表示不存在或者key不存在。
- sinter key1 key2 …… keyN 返回所有给定key的交集。
- sinterstore dstkey key1 ....... keyN 返回所有给定key的交集,并保存交集存到dstkey下。
- sunion key1 key2 ...... keyN 返回所有给定key的并集。
- sunionstore dstkey key1 ...... keyN 返回所有给定key的并集,并保存并集到dstkey下。
- sdiff key1 key2 ...... keyN 返回所有给定key的差集。
- sdiffstore dstkey key1 ...... keyN 返回所有给定key的差集,并保存差集到dstkey下。
- smembers key 返回key对应set的所有元素,结果是无序的。