zoukankan      html  css  js  c++  java
  • Redis基本数据结构之Set

    1.1Set (集合)

    集合(set)类型也是用来保存多个 字符串元素,但和 列表类型 不一样的是,集合中 不允许有重复元素,并且集合中的元素是 无序的,不能通过 索引下标 获取元素。

    一个 集合 最多可以存储 2 ^ 32 - 1 个元素。Redis 除了支持 集合内增删改查,同时还支持 多个集合交集并集差集。合理地使用好集合类型,能在实际开发中解决很多实际问题。

    1.1.1 相关命令

    添加元素

    命令为: sadd key element [element ...]

    返回结果为添加成功的 元素个数,例如:

    (1) 删除元素

    命令为: srem key element [element ...]

    返回结果为成功删除 元素个数,例如:

    (2) 计算元素个数

    命令为: scard key

    scard 的 时间复杂度 为 O(1),它 不会遍历 集合所有元素,而是直接用 Redis 的 内部 的变量。

    (3) 判断元素是否在集合中

    命令为: sismember key element

    如果给定元素 element 在集合内返回 1,反之返回 0

    (4) 随机从集合返回指定个数元素

    命令为: srandmember key [count]

    [count] 是 可选参数,如果不写默认为 1

    先将集合中的元素变成 a b c d e f

    (5) 从集合随机弹出元素

    命令为:spop key

    spop 操作可以从 集合随机弹出 一个元素

    注意:Redis 从 3.2 版本开始, spop 也支持 [count] 参数。

    srandmember 和 spop 都是 随机 从集合选出元素,两者不同的是 spop 命令执行后,元素 会从集合中 删除,而 srandmember 不会删除元素

    (6) 获取所有元素

    命令为: smembers key

    返回集合的所有元素,并且返回结果是无序

    (7) 求多个集合的交集

    现在有 两个集合,它们分别是 user:1:follow 和 user:2:follow。

    命令为: sinter key [key ...]

    使用效果如图:

    (8) 求多个集合的并集

    命令为: suinon key [key ...]

    使用效果如图

    (9) 求多个集合的差集

    命令为:sdiff key [key ...]

    前面三个求 交集并集差集 的操作得到的结果,如图所示

    (10) 将交集,并集,差集结果保存

    集合间 的运算在 元素较多 的情况下会 比较耗时,所以 Redis 提供了以下 三个命令原命令 + store)将 集合间交集并集差集 的结果保存在 destination key 中。

    命令为:

    sinterstore destination key [key ...]

    suionstore destination key [key ...]

    sdiffstore destination key [key ...]

    下面的操作会将 user:1:follow 和 user:2:follow 两个集合 的 交集结果 保存在 user:1_2:inter 中,user:1_2:inter 本身也是 集合类型

    (11) 命令的时间复杂度

    1.1.2 应用场景

    (1)用户标签

    举两个例子:

    娱乐新闻推荐:一个用户可能对娱乐、体育比较感兴趣,另一个用户可能对历史、新闻比较感兴趣,这些兴趣点就是标签。有了这些数据就可以得到喜欢同一个标签的人,以及用户的共同喜好的标签,这些数据对于用户体验以及增强用户黏度比较重要。

    电商人群分类:一个电子商务的网站会对不同标签的用户做不同类型的推荐,比如对数码产品比较感兴趣的人,在各个页面或者通过邮件的形式给他们推荐最新的数码产品,通常会为网站带来更多的利益。

    (2) 其他应用场景

    命令组合 应用场景
    sadd 标签
    spop / srandmember 生成随机数(如抽奖)
    sadd + sinter 社交需求(共同好友)
  • 相关阅读:
    P3381 【模板】最小费用最大流
    Android Studio安装插件提示was not installed: Cannot download的解决
    webpack 引用vconsole
    vue ...mapMutations 的第一个参数默认为 数据对象state
    vue 如何实现在函数中触发路由跳转
    axios 使用
    rem 的使用
    vscode 习惯配置
    修改默认的inout输入框背景颜色
    vue -本地服务配置
  • 原文地址:https://www.cnblogs.com/songsongsun/p/14447642.html
Copyright © 2011-2022 走看看