×

redis 数据库编程

Redis Api的使用和理解之集合

feihu1996 feihu1996 发表于2020-05-17 21:52:43 浏览21 评论0

抢沙发发表评论

五、集合类型

1、集合键值结构

# 将一个或多个成员元素加入到集合中
sadd my_set value1 value2 ...
# 移除集合中的一个或多个成员元素
srem my_set value1 value2 ...

特点

1.1 无序

1.2 没有重复元素

1.3 支持集合间操作

2、集合内

2.1 API

sadd

sadd key element
  • 向集合key添加element

  • 可以是多个element

  • 如果element已经存在,则添加失败

  • 时间复杂度为O(1)

srem

srem key element
  • 将集合key中的element移除掉

  • 时间复杂度为O(1)

scard

scard key
  • 返回集合中元素的数量

  • 当集合 key 不存在时,返回 0

sismember

# 判断成员元素是否是集合的成员
sismember key value
  • 如果成员元素是集合的成员,返回 1

  • 如果成员元素不是集合的成员,或 key 不存在,返回 0

srandmember

srandmember key [count]

返回集合中的一个随机元素

如果集合为空,返回 nil

接受可选的 count 参数

如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合

如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值

如果集合为空,返回空数组

spop

spop key [count]

移除集合中一个或多个随机元素

移除后会返回移除的元素

当集合不存在或是空集时,返回 nil

smembers

smembers key

返回集合中的所有的成员

返回结果是无序的

不存在的集合 key 被视为空集合

时间复杂度为O(N)

  • 小心使用

  • 容易造成阻塞

sscan

sscan key cursor [match] [count]

用于迭代集合中的元素

  • cursor: 游标

  • pattern: 匹配的模式

  • count: 指定从数据集里返回多少元素,默认值为 10

2.2 实战

抽奖系统

  • 放在集合中

  • spop/srandmember

Like、赞、踩: id放在集合中

打标签

  • 给用户添加标签

    sadd user:1:tags tag1 tag2 ...
  • 给标签添加用户

    sadd tag:1:users user1 user2 ...
    sadd tag:2:users user3 user5 ...

3、集合间

3.1 API

sdiff

sdiff key1 key2 ...
  • 返回给定集合之间的差集

  • 不存在的集合 key 将视为空集

  • 差集的结果来自前面的key1

sdiffstore destkey key1 key2 ...
  • 将给定集合之间的差集存储在指定的集合中,方便下次使用

  • 如果指定的集合 key 已存在,则会被覆盖

  • 返回结果集中的元素数量

sinter

sinter key1 key2 ...
  • 返回给定所有给定集合的交集

  • 不存在的集合 key 被视为空集

  • 当给定集合当中有一个空集时,结果也为空集

sinterstore destkey key1 key2 ...
  • 将给定集合之间的交集存储在指定的集合中,方便下次使用

  • 如果指定的集合 key 已存在,则会被覆盖

  • 返回结果集中的元素数量

sunion

sunion key1 key2 ...
  • 返回给定集合的并集

  • 不存在的集合 key 被视为空集

sunionstore destkey key1 key2 ...
  • 将给定集合的并集存储在指定的集合中,方便下次使用

  • 如果指定的集合 key 已存在,则会被覆盖

  • 返回结果集中的元素数量

3.2 实战

社交网络 共同关注

  • sadd

  • sinter

群贤毕至

访客