资讯专栏INFORMATION COLUMN

Redis学习笔记 - 数据类型与API(4)Set

longshengwang / 1394人阅读

摘要:集合特点无序无重复集合间操作常用命令命令含义时间复杂度将一个或多个元素加入到集合当中,已经存在于集合的元素将被忽略,是被添加的元素的数量。给定集合之间的交集将结果保存到新的集合,为给定集合当中基数最小的集合,为给定集合的个数。

Set(集合) 特点

无序

无重复

集合间操作

常用命令
命令 含义 时间复杂度
sadd 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略 O(N), N 是被添加的元素的数量。
srem 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。 O(N), N 为给定 member 元素的数量
smove 将 member 元素从 A 集合移动到 B 集合 O(1)
scard 集合中元素的数量 O(1)
sismember 判断 member 元素是否集合 key 的成员 O(1)
smembers 返回集合 key 中的所有成员 O(N),N 为集合的基数
srandmember 从集合中随机挑选指定数量元素返回 O(N),N 为返回数组的元素个数
spop 移除并返回集合中的一个随机元素 O(1)
sdiff、sdiffstore 给定集合之间的差集(将结果保存到新的集合) O(N),N 是所有给定集合的成员数量之和。
sinter、sinterstore 给定集合之间的交集(将结果保存到新的集合) O(N * M),N 为给定集合当中基数最小的集合,M 为给定集合的个数。
sunion、sunionstore 给定集合之间的并集(将结果保存到新的集合) O(N), N 是所有给定集合的成员数量之和
sadd、srem

sadd key element1 element2 ... (向集合key添加element(如果element已经存在,则添加失败))

srem key element1 element2 ... (移除key中的element元素)

scard、sismember、srandmember、smembers

scard key (计算集合大小)

sismember key element (判断element是否在集合中)

srandmember key count (从集合中随机挑选count个元素)

spop key(从集合中随机弹出一个元素)

smembers key(获取集合中所有元素)

127.0.0.1:6379> sadd setkey go c c++ c# php java python
(integer) 7
127.0.0.1:6379> sadd setkey go
(integer) 0
127.0.0.1:6379> sadd setkey matlab c
(integer) 1
127.0.0.1:6379> smembers setkey
1) "php"
2) "python"
3) "go"
4) "c++"
5) "matlab"
6) "java"
7) "c"
8) "c#"
127.0.0.1:6379> srem setkey c c++
(integer) 2
127.0.0.1:6379> smembers setkey
1) "matlab"
2) "java"
3) "c#"
4) "go"
5) "python"
6) "php"
127.0.0.1:6379> scard setkey
(integer) 6
127.0.0.1:6379> sismember setkey c++
(integer) 0
127.0.0.1:6379> sismember setkey php
(integer) 1
127.0.0.1:6379> srandmember setkey 3
1) "go"
2) "python"
3) "java"
127.0.0.1:6379> srandmember setkey 3
1) "go"
2) "java"
3) "c#"
127.0.0.1:6379> spop setkey
"matlab"
127.0.0.1:6379> spop setkey
"java"
127.0.0.1:6379> smembers setkey
1) "go"
2) "python"
3) "c#"
4) "php"
srandmember 和 spop: spop 从集合中弹出;srandmember 不会破坏集合
sdiff、sinter、sunion

sdiff setkey1 setkey2 (setkey1 setkey2的差集)

sinter setkey1 setkey2 (setkey1 setkey2的交集)

sunion setkey1 setkey2 (setkey1 setkey2的并集)

sdiff|sinter|suion + store destkey setkey1 setkey2 (将差集、交集、并集结果保存到destkey中)

示例见下面 实战 中的 粉丝

更多 Set 相关命令:http://www.redis.cn/commands....
实战 抽奖系统

spop

记录点赞,踩的用户 标签

给用户添加标签

sadd user:1:tags tag1 tag2 tag5
sadd user:2:tags tag3 tag4 tag5
...
sadd user:n:tags tag1 tag3 tag5

给标签添加用户

sadd tag:1:users user1 user3
sadd tag:2:users user3 user5 user6
...
sadd tag:n:users user1 user4
粉丝

关注

127.0.0.1:6379> sadd user:1:follow 2 3 5 6 8 9
(integer) 6
127.0.0.1:6379> sadd user:2:follow 1 3 5 7 8 9
(integer) 6

粉丝

127.0.0.1:6379> sadd user:1:fans 2 7 9
(integer) 3

我关注他,他没关注我

127.0.0.1:6379> sdiff user:1:follow user:1:fans
1) "3"
2) "5"
3) "6"
4) "8"

他关注我,我没关注他

127.0.0.1:6379> sdiff user:1:fans user:1:follow
1) "7"

互粉

127.0.0.1:6379> sinter user:1:follow user:1:fans
1) "2"
2) "9"
127.0.0.1:6379> sinterstore user:1:mutual_fans user:1:follow user:1:fans
(integer) 2
127.0.0.1:6379> smembers user:1:mutual_fans
1) "2"
3) "9"

共同关注

127.0.0.1:6379> sinter user:1:follow user:2:follow
1) "3"
2) "5"
3) "8"
4) "9"

可能认识的人(用户1和用户2关注用户的并集)

127.0.0.1:6379> sunion user:1:follow user:2:follow
1) "1"
2) "2"
3) "3"
4) "5"
5) "6"
6) "7"
7) "8"
8) "9"
Tips
sadd = Tagging (标签)
spop/srandmember = Random item (随机成员)
sadd + sinter = Social Craph (社交平台关系)

相关内容:

Redis学习笔记 - 数据类型与API(1)Key
Redis学习笔记 - 数据类型与API(2)String
Redis学习笔记 - 数据类型与API(3)List
Redis学习笔记 - 数据类型与API(4)Set
Redis学习笔记 - 数据类型与API(5)Sorted Set
Redis学习笔记 - 数据类型与API(6)Hash

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/36531.html

相关文章

  • Redis学习笔记 - 数据类型API(1)Key

    摘要:学习笔记数据类型与相关命令常用命令命令含义时间复杂度查找所有符合给定模式的,为数据库中的数量计算的总数检查是否存在删除指定的设置查看去掉的过期时间查看的类型遍历当较多时,命令执行时间较长,会造成阻塞,慎用该命令。 Redis学习笔记 - 数据类型与API(1)Key Key相关命令 1. 常用命令 命令 含义 时间复杂度 keys 查找所有符合给定模式 pattern 的 k...

    marser 评论0 收藏0
  • Redis学习笔记 - 数据类型API(2)String

    摘要:学习笔记数据类型与字符串使用场景缓存存储分布式锁计数器常用命令命令含义时间复杂度设置获取删除根据是否存在设置计数批量操作为给定的数量为设置新值,并返回旧值将追加到旧的后返回字符串的长度设置获取字符串指定下标对应的值获取对应的设置 Redis学习笔记 - 数据类型与API(2)String String (字符串) 1. 使用场景 缓存 (key-value、存储json) 分布式锁 ...

    ityouknow 评论0 收藏0
  • Redis学习笔记 - 数据类型API(5)Sorted Set

    摘要:相关内容学习笔记数据类型与学习笔记数据类型与学习笔记数据类型与学习笔记数据类型与学习笔记数据类型与学习笔记数据类型与 Sorted Set (有序集合) 特点 有序 无重复 集合间操作 集合 VS 有序集合 集合 有序集合 无重复元素 无重复元素 无序 有序 element element + score 列表 VS 有序集合 列表 有序集合 可以...

    pingink 评论0 收藏0
  • Redis学习笔记 - Bitmaps(位图)

    摘要:的最大优势之一在存储信息时极其节约空间。做多个的交集并集非异或操作并将结果保存到中。注意时的偏移量,当偏移量很大时,可能会有较大耗时。位图不是绝对的好,有时可能更浪费空间。 什么是 Bitmaps Bitmaps 并不是实际的数据类型,而是定义在String类型上的一个面向字节操作的集合。因为字符串是二进制安全的块,他们的最大长度是512M,最适合设置成2^32个不同字节。 Bitma...

    Olivia 评论0 收藏0
  • Redis学习笔记 - Slow Log 慢查询日志

    摘要:什么是是用来记录查询执行时间的日志系统。相关内容学习笔记数据类型与学习笔记数据类型与学习笔记数据类型与学习笔记数据类型与学习笔记数据类型与学习笔记数据类型与 什么是 SLOW LOG 1. Slow log 是 Redis 用来记录查询执行时间的日志系统。 2. 查询执行时间指的是不包括像客户端响应(talking)、发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。 3....

    BigTomato 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<