• redis 简单整理——redis 的集合基本结构和命令[五]


    前言

    简单介绍一下集合的基本结构和命令。

    正文

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

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

    简单介绍一下命令:

    sadd 提供添加程序:

    srem 表示删除:

    scard key 表示集合个数:

    sismember key element 查看某个元素是否在集合中。

    srandmember key count 随机从集合中取出几个数字。

    spop key count 随机从集合中弹出几个数字。

    上面也提及到了smembers 表示列出全部数据。

    下面就是一些集合之间的操作了。

    求两个集合的交集:

    求两个集合的并集:

    求多个集合的差集:

    图片:

    将交集、并集、差集的结果保存:

    sinterstore destination key [key ...] 
    suionstore destination key [key ...] 
    sdiffstore destination key [key ...]
    

    集合常用命令时间复杂度:

    内部编码:

    集合类型的内部编码有两种:

    ·intset(整数集合):当集合中的元素都是整数且元素个数小于set-max- intset-entries配置(默认512个)时,

    Redis会选用intset来作为集合的内部实 现,从而减少内存的使用。

    ·hashtable(哈希表):当集合类型无法满足intset的条件时,Redis会使 用hashtable作为集合的内部实现

    使用场景

    集合类型比较典型的使用场景是标签(tag)。

    例如一个用户可能对娱 乐、体育比较感兴趣,另一个用户可能对历史、新闻比较感兴趣,这些兴趣 点就是标签。

    有了这些数据就可以得到喜欢同一个标签的人,以及用户的共 同喜好的标签,这些数据对于用户体验以及增强用户黏度比较重要。

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

    示例:

    给用户添加标签

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

    或者给标签添加用户:

    sadd tag1:users user:1 user:3 
    
    sadd tag2:users user:1 user:2 user:3 ... 
    
    sadd tagk:users user:1 user:2 ...
    

    删除用户标签:

    srem user:1:tags tag1 tag5
    

    删除标签下的用户:

    srem tag1:users user:1 
    
    srem tag5:users user:1
    

    计算用户共同感兴趣的标签:

    sinter user:1:tags user:2:tags
    

    其他的一些需求:

    sadd=Tagging(标签) 
    
    ·spop/srandmember=Random item(生成随机数,比如抽奖) 
    
    ·sadd+sinter=Social Graph(社交需求)
    

    下一节有序集合。

  • 相关阅读:
    结构struct 联合Union和枚举Enum的细节讨论
    ubuntu 查询 修改 时间
    在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)
    浅谈Android系统开发中LOG的使用
    如何单独编译Android源代码中的模块
    在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口
    在Ubuntu上为Android系统编写Linux内核驱动程序
    在Ubuntu上为Android系统内置Java应用程序测试Application Frameworks层的硬件服务
    在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序
    在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
  • 原文地址:https://www.cnblogs.com/aoximin/p/15143264.html
Copyright © 2020-2023  润新知