set集合

set基本介绍

无序的、去重的
元素是字符串类型
最多包含2^32-1元素

set集合
增加一个或多个元素

SADD key member [member ...]

如果元素已经存在,则自动忽略

举例
SADD friends peter
SADD friends jack tom john
SADD friends may tom

set集合
移除一个或者多个元素

SREM key member [member ...]

元素不存在,自动忽略

举例
SREM friends peter
SREM friends tom john

set集合

返回集合包含的所有元素

SMEMBERS key
如果集合元素过多,例如百万个,需要遍历,可能会造成服务器阻塞,生产环境应避免使用
检查给定元素是否存在于集合中
SISMEMBER key member

集合的无序性

SADD friends "peter" "jack" "tom" "john" "may" "ben"
SADD anotherfriends "peter" "jack" "tom" "john" "may" "ben"
SMEMBERS friends
SMEMBERS anotherfriends
注意, SMEMBERS 有可能返回不同的结果,所以,如果需要存储有序且不重复的数据使用有序集合,存储有序可重复的使用列表

随机返回集合中指定个数的

SRANDMEMBER key [count]
如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合
如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值
如果 count 为 0,返回空
如果 count 不指定,随机返回一个元素
举例
SADD friend "peter" "jack" "tom" "john" "may" "ben"
SRANDMEMBER friends 3
SRANDMEMBER friends -5

返回集合中元素的个数

SCARD key
    键的结果会保存信息,集合长度就记录在里面,所以不需要遍历
    随机从集合中移除并返回这个被移除的元素
SPOP key
    把元素从源集合移动到目标集合
SMOVE source destination member

set集合操作

差集
SDIFF key [key ...],从第一个key的集合中去除其他集合和自己的交集部分
SDIFFSTORE destination key [key ...],将差集结果存储在目标key中
举例
SADD number1 123 456 789
SADD number2 123 456 999
SDIFF number1 number2

set集合

交集
SINTER key [key ...],取所有集合交集部分
SINTERSTORE destination key [key ...],将交集结果存储在目标key中
举例
SADD number1 123 456 789
SADD number2 123 456 999
SINTER number1 number2

set集合

并集
SUNION key [key ...],取所有集合并集
SUNIONSTORE destination key [key ...],将并集结果存储在目标key中
举例
SADD number1 123 456 789
SADD number2 123 456 999
SUNION number1 number2

新浪微博的共同关注

需求:当用户访问另一个用户的时候,会显示出两个用户共同关注哪些相同的用户
设计:将每个用户关注的用户放在集合中,求交集即可
实现如下:
peter={‘john‘,‘jack‘,‘may‘}
ben={‘john‘,‘jack‘,‘tom‘}
那么peter和ben的共同关注为:
SINTER peter ben 结果为 {‘john‘,‘jack‘}

set集合

set集合

上一篇:Photoshop为河边人物图片调制出甜美的黄青色


下一篇:如何在 Discourse 中批量移动主题到不同的分类中