set为一个集合
set中的值是不能重复的!
关于set的命令都是s开头
sadd key member [member …]
##新增一个set 127.0.0.1:6379> sadd set set1 set2 set3 (integer) 3 ##查看所有的key 127.0.0.1:6379> keys * 1) "set" ##查看set的元素 127.0.0.1:6379> smembers set 1) "set3" 2) "set1" 3) "set2" 127.0.0.1:6379>scard key
##获取所有的key 127.0.0.1:6379> keys * 1) "set" ##查询set中的所有元素 127.0.0.1:6379> smembers set 1) "set3" 2) "set1" 3) "set2" ##判断set中有无这个元素 127.0.0.1:6379> sismember set set1 (integer) 1 ##判断set中有无这个元素 127.0.0.1:6379> sismember set set4 (integer) 0 ##查询set中的元素个数 127.0.0.1:6379> scard set (integer) 3 ##往set中添加元素 127.0.0.1:6379> sadd set lll (integer) 1 ##查询set的所有元素 127.0.0.1:6379> smembers set 1) "lll" 2) "set3" 3) "set1" 4) "set2" ##获取set中的元素个数 127.0.0.1:6379> scard set (integer) 4 127.0.0.1:6379>srem key member [member …]
##查询set中的所有元素 127.0.0.1:6379> smembers set 1) "lll" 2) "set3" 3) "set1" 4) "set2" ##移除set中的某一个元素 127.0.0.1:6379> srem set lll (integer) 1 ##查询set里的元素个数 127.0.0.1:6379> scard set (integer) 3 ##查询set中的所有元素 127.0.0.1:6379> smembers set 1) "set3" 2) "set1" 3) "set2" 127.0.0.1:6379>场景展示:
比如有一个奖品池,奖品都在set中存放,为什么可以在set中存放,因为set是无序不重复的
现在要抽一个奖品,就可以用redis为我们提供的获取随机元素的api
srandmember key [count]
##查询set中的所有元素 127.0.0.1:6379> smembers set 1) "set3" 2) "set1" 3) "set2" ##随机获取set中的元素 127.0.0.1:6379> srandmember set "set3" ##随机获取set中的元素 127.0.0.1:6379> srandmember set "set2" ##随机获取set中的元素 127.0.0.1:6379> srandmember set "set3" ##随机获取set中的元素 127.0.0.1:6379> srandmember set "set1" 127.0.0.1:6379>spop key
##查询所有的key 127.0.0.1:6379> keys * 1) "set" ##获取set中的所有元素 127.0.0.1:6379> smembers set 1) "set3" 2) "set1" 3) "set2" ##随机移除set中的元素 127.0.0.1:6379> spop set "set2" ##随机移除set中的元素 127.0.0.1:6379> spop set "set3" ##获取set中的所有元素 127.0.0.1:6379> smembers set 1) "set1" 127.0.0.1:6379>smove source destination member
##新增一个set 127.0.0.1:6379> sadd set1 v1 v2 v3 (integer) 3 ##新增一个set 127.0.0.1:6379> sadd set2 v4 v5 (integer) 2 ##查询所有的key 127.0.0.1:6379> keys * 1) "set1" 2) "set2" ##查询set的所有元素 127.0.0.1:6379> smembers set1 1) "v1" 2) "v3" 3) "v2" ##查询set的所有元素 127.0.0.1:6379> smembers set2 1) "v5" 2) "v4" ##移动set的某一个元素到另一个set中 127.0.0.1:6379> smove set1 set2 v1 (integer) 1 ##查询set的所有元素 127.0.0.1:6379> smembers set1 1) "v3" 2) "v2" ##查询set的所有元素 127.0.0.1:6379> smembers set2 1) "v1" 2) "v5" 3) "v4" 127.0.0.1:6379>场景:
微博|B站中有一个共同关注功能!在数学中称为交集
这个功能如何在Redis中的Set去做呢
数字集合类:
差集 sdiff并集 sunion交集 sinterredis中实现差集
sdiff key [key …]
##添加set 127.0.0.1:6379> sadd set1 a b c (integer) 3 ##添加set 127.0.0.1:6379> sadd set2 a e d (integer) 3 ##使用sdiff 以set1作为参考,比较与set2中的哪些元素不同 127.0.0.1:6379> sdiff set1 set2 1) "b" 2) "c" ##使用sdiff 以set2作为参考,比较与set1中的哪些元素不同 127.0.0.1:6379> sdiff set2 set1 1) "e" 2) "d" 127.0.0.1:6379>redis中实现交集
sinter key key
##查询所有的key 127.0.0.1:6379> keys * 1) "set1" 2) "set2" ##查询set的所有元素 127.0.0.1:6379> smembers set1 1) "c" 2) "b" 3) "a" ##查询set的所有元素 127.0.0.1:6379> smembers set2 1) "e" 2) "d" 3) "a" ##比较set并做交集输出 127.0.0.1:6379> sinter set1 set2 1) "a" 127.0.0.1:6379>redis中实现并集
sunion key key
##查询所有的key 127.0.0.1:6379> keys * 1) "set1" 2) "set2" ##查询set的所有元素 127.0.0.1:6379> smembers set1 1) "c" 2) "b" 3) "a" ##查询set的所有元素 127.0.0.1:6379> smembers set2 1) "e" 2) "d" 3) "a" ##利用sunion做set的并集 127.0.0.1:6379> sunion set1 set2 1) "b" 2) "c" 3) "a" 4) "e" 5) "d" 127.0.0.1:6379>微博 BIliBILI
将XX用户所有关注的人放在set中,因为每一个用户的Id都是唯一的!将他的粉丝也放在一个集合中
共同关注:把这两个集合做一个交集即可
共同爱好:在这两个中可以存入爱好的属性,同样做一个交集即可
二度好友
推荐好友:(六度分割理论)