Redis - Set 集合

目录

前言

命令

SADD 将一个或者多个元素添加到 set 中

语法

SMEMBERS 获取一个 set 中的所有元素

语法

SISMEMBER 判断⼀个元素在不在 set 中

语法

SCARD 获取 set 中的元素个数

语法

SPOP 从 set 中随机删除并返回⼀个或者多个元素

语法

SMOME 将⼀个元素从源 set 取出并放入目标 set 中

语法

SREM 将指定的元素从 set 中删除

语法

SINTER 获取给定 set 的交集中的元素

语法

SINTERSTORE 获取给定 set 的交集中的元素并保存目标 set 中

语法

SUNION 获取给定 set 的并集中的元素

语法

SUNIONSTORE 获取给定 set 的并集中的元素并保存到目标 set 中

语法

SDIFF 获取给定 set 的差集中的元素

语法

SDIFFSTOR  获取给定 set 的差集中的元素并保存到目标 set 中

语法

内部编码

使用场景

一.存储标签

二.存储用户好友

三.统计 UV


前言

        集合类型可保存多个字符串类型的元素,但和列表类型不同的是,集合中的元素之间是⽆序的(顺序不重要,变换一下集合中的数据顺序,集合不会发生改变) 的并且元素不允许重复

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

命令

SADD 将一个或者多个元素添加到 set 中

注意,重复的元素⽆法添加到 set 中。

语法

SADD key member [member ...]

时间复杂度:O(1)  

返回值:本次添加成功的元素个数。

        因为集合中不会存储相同的数据,所以会对插入的数据进行去重,插入 1 1 2 3,实际上插成功 1 2 3,3个数据

SMEMBERS 获取一个 set 中的所有元素

语法

SMEMBERS key

时间复杂度:O(N)

返回值:列表中的所有元素

SISMEMBER 判断⼀个元素在不在 set 中

语法

SISMEMBER key member

时间复杂度:O(1)

返回值:1 表⽰元素在 set 中。0 表⽰元素不在 set 中或者 key 不存在

SCARD 获取 set 中的元素个数

语法

SCARD key

时间复杂度:O(1) 

返回值:set 内的元素个数。

SPOP 从 set 中随机删除并返回⼀个或者多个元素

        pop 一般表示从末尾删除一个元素,但集合中的元素是无序的,所以并不清楚哪个元素在末尾,相当于随机删除一个或多个元素(在源码中对)

语法

SPOP key [count]

时间复杂度:O(N),n 是 count 

返回值:取出的元素。

SMOME 将⼀个元素从源 set 取出并放入目标 set 中

语法

SMOVE source destination member

时间复杂度:O(1)

返回值:1 表⽰移动成功,0 表⽰失败。

SREM 将指定的元素从 set 中删除

        可以一次删除一个元素,也可以一次删除多个元素

语法

SREM key member [member ...]

时间复杂度:O(N), N 是要删除的元素个数.

返回值:本次操作删除的元素个数。

SINTER 获取给定 set 的交集中的元素

语法

SINTER key [key ...]

时间复杂度:O(N * M), N 是最⼩的集合元素个数. M 是最⼤的集合元素个数.

返回值:交集的元素。

SINTERSTORE 获取给定 set 的交集中的元素并保存目标 set 中

语法

SINTERSTORE destination key [key ...]

时间复杂度:O(N * M), N 是最⼩的集合元素个数. M 是最⼤的集合元素个数.

返回值:交集的元素个数。

SUNION 获取给定 set 的并集中的元素

语法

SUNION key [key ...]

时间复杂度:O(N), N 给定的所有集合的总的元素个数

返回值:并集的元素

SUNIONSTORE 获取给定 set 的并集中的元素并保存到目标 set 中

语法

SUNIONSTORE destination key [key ...]

时间复杂度:O(N), N 是给定的所有集合的总的元素个数.

返回值:并集的元素个数

SDIFF 获取给定 set 的差集中的元素

语法

SDIFF key [key ...]

时间复杂度:O(N), N 给定的所有集合的总的元素个数

返回值:差集的元素

SDIFFSTOR  获取给定 set 的差集中的元素并保存到目标 set 中

语法

SDIFFSTORE destination key [key ...]

时间复杂度:O(N), N 给定的所有集合的总的元素个数

返回值:差集的元素个数

内部编码

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

  • intset(整数集合):当集合中的元素都是整数并且元素的个数⼩于 set-max-intset-entries 配置 (默认 512 个)时,Redis 会选⽤ intset 来作为集合的内部实现,从⽽减少内存的使⽤。
  • hashtable(哈希表):当集合类型⽆法满⾜ intset 的条件时,Redis 会使⽤ hashtable 作为集合的内部实现。

当元素个数较少并且都为整数时,内部编码为 intset

当存在元素不是整数时,内部编码为 hashtable

使用场景

一.存储标签

        集合类型⽐较典型的使⽤场景是标签(tag),例如 A ⽤户对娱乐、体育板块⽐较感兴趣,B ⽤户对历史、新闻⽐较感兴趣,这些兴趣点可以被抽象为标签。

        为什么集合适合存储标签呢?因为标签是不在乎顺序的,用户喜欢打篮球和旅游,这两个标签是不需要区分顺序的,这与集合的无效性相对应。一个用户相同的标签只用存储一份即可,比如用户喜欢打篮球,只需要存储一份喜欢打篮球的标签即可,不需要存多份,这与集合中的元素不允许重复相对应。

        而且由于集合可以很好的支持交并操作,所以可以很方便的分析两个用户之间的共同爱好,还可以知道用户更喜欢哪些方面,这些数据对于增强⽤户体验和⽤户黏度都⾮常有帮助。例如⼀个 电⼦商务⽹站会对不同标签的⽤户做不同的产品推荐。

二.存储用户好友

        存储用户好友,方便分析用户之间的共同好友(通过求交集)

三.统计 UV

        一个互联网产品怎么衡量用户量,用户规模?主要的指标是两方面:PV,UV

        PV:页面浏览量,每次访问服务器都会产生一个 PV

        UV:用户浏览量,每个用户访问服务器都会产生一个 UV ,但一个用户的多次访问不会使 UV 增加,所以要对用户的访问信息进行去重,同一个用户的访问信息只记录一次,这个去重的操作就可以由 set 实现

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/4498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 单例类中设置和获取属性的问题及解决方案

1、问题背景 在编写 Python 代码时,有时需要创建一个单例类,这样就可以在程序中使用该类的唯一实例。为了实现这一点,可以定义一个类,并在其 __new__ 方法中检查该类的实例是否已经存在。如果实例存在,则返回该实例&a…

Rancher-Longhorn-新增磁盘以及卷创建原理和卷副本调度规则

一、添加磁盘-官网指引 重点在于: 1、比如你新增了一块盘,你需要做一下事情: 1、执行 lsblk 能找到你的盘。 2、然后执行 fdisk /dev/sdxx 分区你的盘。 3、然后对于分区部署文件系统, mkfs.xfs 4、然后执行 mount /dev/sdxxx 你…

Redis入门到通关之数据结构解析-SkipList

文章目录 ☃️概述☃️总结 欢迎来到 请回答1024 的博客 🍓🍓🍓欢迎来到 请回答1024的博客 关于博主: 我是 请回答1024,一个追求数学与计算的边界、时间与空间的平衡,0与1的延伸的后端开发者。 博客特色&…

--菱形继承--

#include<iostream> using namespace std;class Animal { public:Animal(){m_Age 0;}int m_Age; };//利用虚继承 解决菱形继承的问题 //继承之前 加上关键字 virtual 变为虚继承 // Animal类称为 虚基类 //羊类 class Sheep:virtual public Animal { public:};//驼类 cl…

基于springboot实现的汽车租赁系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

Markdown编辑器的使用

欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#x…

一文搞懂 One-Hot Encoding(独热编码)

文章目录 前言 1、独热编码的原理 2、独热编码的分类 3、独热编码的应用 前言 本文将从独热编码的原理、独热编码的分类、独热编码的应用三个方面&#xff0c;来展开介绍独热编码 One-Hot Encoding。 1、独热编码的原理 特征数字化&#xff1a;将分类变量&#xff08;或称为离…

对MAE的解析

一、背景 Masked Autoencoders&#xff08;掩膜自编码器&#xff09;在NLP领域大放异彩&#xff0c;它是去噪自编码器[1]的一种具体实现方式&#xff0c;然而其在视觉领域的研究进展却有所滞后。作者指出了视觉和NLP两个领域中掩膜自编码器的差异&#xff1a; 架构差异&#xf…

【智能算法】成吉思汗鲨鱼优化算法(GKSO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2023年&#xff0c;G Hu等人受到成吉思汗鲨鱼&#xff08;GKS&#xff09;捕食和生存行为启发&#xff0c;提出了成吉思汗鲨鱼优化算法&#xff08;Genghis Khan Shark Optimizer, GKSO&#xff09;…

Vue开发者工具Vue.js devtools Vue开发者工具安装步骤前端开发工具免费附带教程

下载地址&#xff1a; 链接: https://pan.baidu.com/s/1JaGvhS4NoD8lL07n2ScE9A 密码: 9rfs 安装步骤&#xff1a; 以谷歌浏览器为例 第一步&#xff1a;打开Chrome的拓展程序 如图 第二步&#xff1a; 将下载好的拓展程序拖入即可&#xff0c;如下图 第三步&#xff1a;…

现代永磁同步电机控制原理pdf及全套matlab仿真模型

现代永磁同步电机控制原理pdf及matlab仿真模型。全书包含SVPWM, DTC, Lun, smo, EKF, HFI等经典控制算法。将书中10章节涉及到的模型复原搭建模型。 模型获取链接&#xff1a;现代永磁同步电机控制原理pdf及全套matlab仿真模型

TCP-模拟BS架构通信

简介 bs是通过浏览器进行访问的每次访问都会开启一个短期的socket用来访问服务器的资源 响应报文的格式 服务端 bs架构中的b是浏览器&#xff0c;不需要我们书写&#xff0c;我们只需要书写服务端即可 服务端 public class Server {public static void main(String[] args) {S…

【Docker】docker部署lnmp和wordpress网站

环境准备 docker&#xff1a;192.168.67.30 虚拟机&#xff1a;4核4G systemctl stop firewalld systemctl disable firewalld setenforce 0 安装docker #安装依赖包 yum -y install yum-utils device-mapper-persistent-data lvm2 #设置阿里云镜像 yum-config-manager --add…

C++各种排序算法详解及示例源码

1、排序算法 排序算法&#xff08;sorting algorithm&#xff09;用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用&#xff0c;因为有序数据通常能够被更高效地查找、分析和处理。 1.1 评价维度 运行效率&#xff1a;我们期望排序算法的时间复杂度尽量低&#xf…

力扣数据库题库学习(4.25日)

1484. 按日期分组销售产品 问题链接 思路与分析 编写解决方案找出每个日期、销售的不同产品的数量及其名称。 每个日期的销售产品名称应按词典序排列。 返回按 sell_date 排序的结果表。我来分析一下&#xff0c;这里的题目要求其实就是统计不同日期下的销售产品数&#xf…

Matlab 使用subplot绘制多个子图,一元拟合

实现效果&#xff1a; clc; clear;filename sri.xlsx; % 确认文件路径data readtable(filename); datavalue data{:,2:end}; datavalue datavalue;fig figure(Position, [0, 0, 1500, 900]); indexString ["(a)","(b)","(c)","(d)&qu…

<计算机网络自顶向下> Internet Protocol(未完成)

互联网中的网络层 IP数据报格式 ver: 四个比特的版本号&#xff08;IPV4 0100, IPV6 0110&#xff09; headlen&#xff1a;head的长度&#xff08;头部长度字段&#xff08;IHL&#xff09;指定了头部的长度&#xff0c;以32位字&#xff08;4字节&#xff09;为单位计算。这…

可替换XC6206P332MR的润石超低功耗LDO RS3221-3.3YF3助力智能门锁设计,精度低至1%

润石科技的RS3221&#xff0c;可满足超低功耗&#xff0c;在智能门锁设计时&#xff0c;兼容替换TOREX的XC6206P332MR&#xff0c;具体请参考图1参数对比&#xff1a; 图1&#xff1a;RS3221-3.3YF3与XC6206P332MR电性能参数对比 通过上表可知&#xff0c; 1、 RS3221-3.3YF3…

家政服务小程序:家政行业的数字化转型

随着大众生活水平的提高&#xff0c;以及老龄化的加速&#xff0c;家政服务已经成为了大众生活中不可或缺的一部分。目前&#xff0c;我国家政服务市场的规模在持续扩大&#xff0c;发展前景一片大好。在日益提升的家政需求下&#xff0c;大众对家政服务的种类也逐渐多样。 为…

【ARMv9 DSU-120 系列 4.1 -- Utility bus 详细介绍 2】

请阅读【Arm DynamIQ™ Shared Unit-120 专栏 】 文章目录 ARM DSU-120DSU-120 Utiity BusCluster and core PPUPPU寄存器的访问性PPU寄存器的作用系统组件基地址ARM DSU-120 DSU-120 Utiity Bus 在ARMv9架构中,DSU-120(Dynamic Shared Unit 120)是一个关键组件,用于管理核…