当前位置: 首页 > news >正文

redis:set集合命令,内部编码,使用场景

在这里插入图片描述

个人主页 : 个人主页
个人专栏 : 《数据结构》 《C语言》《C++》《Linux》《网络》 《redis学习笔记》

文章目录

  • 前言
  • 命令
    • SADD
    • SMEMBERS
    • SISMEMBER
    • SCARD
    • SPOP
    • SMOVE
    • SREM
    • 集合间操作
      • SINTER
      • SINTERSTORE
      • SUNION
      • SUNIONSTORE
      • SDIFF
      • SDIFFSTORE
  • 内部编码
  • 使用场景
  • 总结


前言

ste集合类型是保存多个字符串类型的元素,但和列表类型不同,集合中元素之间是无序的,元素也不允许重复。

在这里插入图片描述

redis除了支持集合内的增删查改操作,同时支持多个集合取交集,并集,差集。


命令

SADD

将一个或者多个元素添加到 set 中。重复元素无法添加到 set 中

SADD key member [ member … ]

返回值:本次添加成功的元素个数
时间复杂度:O(1)

在这里插入图片描述


SMEMBERS

获取一个set中所有元素。元素间的顺序是无序的,获取结果的顺序是随机的

SMEMBERS key

返回值:所有元素的列表
时间复杂度:O(N),N为集合元素个数

在这里插入图片描述


注意:
如果执行多次smembers命令,获取结果顺序一致,可能有以下原因:
在这里插入图片描述


SISMEMBER

判断一个元素在不在 set 中

SISMEMBER key member

返回值:1 表示元素在 set 中;0 表示元素不在 set 中 或者 key 不存在
时间复杂度:O(1),set 集合是通过哈希表来实现的

在这里插入图片描述


SCARD

获取一个 set 的基数,即 set 中的元素个数

SCARD key

返回值:set 内元素的个数
时间复杂度:O(1)

在这里插入图片描述


SPOP

从 set 中删除并返回一个或者多个元素。由于 set 内的元素是无序的,所以取出哪个元素实际是未定义行为,即spop删除元素就是随机删除

SPOP key [count]

返回值:取出的元素
时间复杂度:O(N),N为count的个数

在这里插入图片描述
在这里插入图片描述


SMOVE

将一个元素从 source 取出并放入 destrination 中

SMOVE source destrination member

返回值:1 表示移动成功;0 表示失败
时间复杂度:O(1)
在这里插入图片描述


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给定的所有集合的总的元素个数
在这里插入图片描述


SDIFFSTORE

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

SDIFFSTORE destination key [key …]

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

在这里插入图片描述

内部编码

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

  • intset(整数集合):当集合中的元素都是整数并且元素的个数小于 set-max-inset-entries 配置时,redis会使用 intset来作为集合的内部实现;intset是一种紧凑的数据结构,专门用于存储整数数值,通过压缩存储,intset能够节省内存空间
  • hashtable(哈希表):当集合类型无法 intset 的条件时,redis会使用hashtable作为集合的内部实现;hashtable允许存储各种类型的元素,set集合的每个元素都作为一个字符串对象存储,而对应的值则统一为nullptr

在这里插入图片描述

使用场景

  1. 使用 set 来保存用户的标签;标签也就是用户画像,分析出用户的一些特征,分析清楚特征之后,再投其所好
  2. 使用 set 来计算用户之间的共同好友;基于 “集合求交集”,A 和 B是好友,B 和 C是好友,B 和 C 和 D都是好友,就可以将D推荐给A
  3. 使用 set 统计 UV(独立访客数量);每一个用户,访问服务器,都会产生一个 UV,但是同一个用户多次访问,不会是UV增加,UV需要按照用户进行去重

总结

以上就是我的redis学习笔记

在这里插入图片描述

相关文章:

redis:set集合命令,内部编码,使用场景

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREM集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 内部编码使用场景总结 前言…...

45期代码随想录算法营总结

代码随想录训练营总结与收获 在为期60天的代码随想录训练营结束后,我感慨良多。这段时间不仅让我在编程技能上有了明显的提升,更让我在学习习惯和时间管理上有了深刻的反思和改变。 报名参加这个训练营对我来说是一个重要的监督机制。之前我总是拖延&a…...

深入理解Java中的instanceof关键字及接口新特性:方法实现的可能性

目录 引言 1. 什么是instanceof关键字? 1.1 语法结构 1.2 instanceof的用法示例 1.3 instanceof的应用场景 2. Java中的接口能包含方法实现吗? 2.1 默认方法(Default Method) 2.2 静态方法(Static Method&…...

【python中如果class没有self会怎行】

python中如果class没有self会怎样TOC 在Python中,self是一个约定俗成的名称,用于表示类的实例。如果没有使用self,会导致以下问题: 1、无法访问实例属性: 在类的方法中,如果没有self,方法将无…...

【算法】(Python)动态规划

动态规划: dynamic programming。"programming"指的是一种表格法,而非编写计算机程序。通常解决最优化问题(optimization problem)。将问题拆分成若干个子问题,求解各子问题来得到原问题的解。适用于多阶段…...

EasyExcel 学习之 导出 “提示问题”

EasyExcel 学习之 导出 “提示问题” 现象分析解决(伪代码)前端 POST 实现后端实现 现象 EasyExcel 支持导出 xlsx、xls、csv 三种文件格式。在导出过程中可能发生各种异常,当发生异常时应该提示错误信息而非导出一个错误的文件。 分析 首…...

应用系统开发(3)低功耗四运算放大器LM324N

LM324N 是一种广泛使用的 低功耗四运算放大器,由德州仪器(Texas Instruments)和其他制造商生产。它具有四个独立的运算放大器,能够在单电源或双电源模式下运行,适合多种模拟电路应用。以下是详细信息: 芯片基本信息 型号:LM324N封装类型:常见 DIP(双列直插封装)或 SO…...

基于微信小程序的电商平台+LW示例参考

1.项目介绍 系统角色:管理员、普通用户功能模块:管理员(用户管理、商品分类、商品管理、订单管理、系统管理等),普通用户(个人中心、收藏、我的订单、查看商品等)技术选型:SpringBo…...

[Android] Graphic Buffer 的申请

前言: MediaCodec 支持 texture mode,即MediaCodec解码video完毕后把 yuv 数据填入 GPU 共享出来的 graphic buffer 里面,app 会把 video 的 yuv数据 和 ui 的数据通过通过软件渲染组件(opengl等)发送给GPU 进行一并渲染。这样做的效率较低&…...

【大数据学习 | HBASE高级】storeFile文件的合并

Compaction 操作分成下面两种: Minor Compaction:是选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile,对于删除、过期、多余版本的数据不进行清除。 Major Compaction:是指将所有的StoreFile合并成一个StoreFile&am…...

多平台编包动态引入依赖的解决方案

最近开发时遇到了这样的需求,A 平台需要引入一个 video.js,B 平台却是不需要的,那么面向 B 平台打包的时候把依赖装进去自然就不大合适。最好的方法是动态引入依赖,根据平台来判断要不要引入 动态引入依赖 很快啊,动…...

[单例模式]

目录 [设计模式] 单例模式 1. 饿汉模式 2. 懒汉模式 3. 单例模式的线程安全问题 [设计模式] 设计模式是软件工程中的一种常见做法, 它可以理解为"模板", 是针对一些常见的特定场景, 给出的一些比较好的固定的解决方案. 不同语言适用的设计模式是不一样的. 这里…...

速盾:游戏盾的功能和原理详解

速盾有一款专注于网络游戏安全的防护系统,它通过实时监测游戏网络流量和玩家行为,以及使用先进的算法和技术进行分析和识别,检测出各种外挂、作弊行为和恶意攻击,从而保障游戏的公平性和玩家的安全性。 速盾游戏盾的主要功能包括…...

Spleeter:音频分离的革命性工具

目录 什么是Spleeter?Spleeter的工作原理Spleeter的应用场景Spleeter的技术优势Spleeter的挑战与局限性结论 什么是Spleeter? Spleeter 是一个由 Deezer 开发的开源音频源分离工具。它基于深度学习技术,尤其是卷积神经网络(CNN&a…...

【笔记】自动驾驶预测与决策规划_Part6_不确定性感知的决策过程

文章目录 0. 前言1. 部分观测的马尔可夫决策过程1.1 POMDP的思想以及与MDP的联系1.1.1 MDP的过程回顾1.1.2 POMDP定义1.1.3 与MDP的联系及区别POMDP 视角MDP 视角决策次数对最优解的影响 1.2 POMDP的3种常规解法1.2.1 连续状态的“Belief MDP”方法1. 信念状态的定义2. Belief …...

openresty入门教程:access_by_lua_block

在OpenResty中,access_by_lua_block 是一个功能强大的指令,它允许你在Nginx的访问控制阶段执行Lua脚本。这个阶段发生在Nginx处理请求的过程中,紧接在rewrite阶段之后,但在请求被传递到后端服务器(如PHP、Node.js等&am…...

Caused by: org.apache.flink.api.common.io.ParseException: Row too short:

Flink版本 1.17.2 错误描述 Caused by: org.apache.flink.api.common.io.ParseException: Row too short: 通过flink中的flinkSql直接使用对应的connector去获取csv文件内容,报获取的数据太短了 可能原因 1.创建的表字段多于csv文件当中的表头 定位 在获取csv…...

hbase的安装与简单操作

好的,这里是关于 HBase 的安装和基本操作的详细步骤,分成几个更清晰的阶段: 第一部分:安装和配置 HBase 1. 环境准备 HBase 依赖于 Hadoop,因此首先确保 Hadoop 已经正确安装和配置。如果没有安装,请先下…...

PySpark本地开发环境搭建

一.前置事项 请注意,需要先实现Windows的本地JDK和Hadoop的安装。 二.windows安装Anaconda 资源:Miniconda3-py38-4.11.0-Windows-x86-64,在window使用的Anaconda资源-CSDN文库 右键以管理员身份运行,选择你的安装路径&#x…...

【进阶】Stable Diffusion 插件 Controlnet 安装使用教程(图像精准控制)

Stable Diffusion WebUI 的绘画插件 Controlnet 最近更新了 V1.1 版本,发布了 14 个优化模型,并新增了多个预处理器,让它的功能比之前更加好用了,最近几天又连续更新了 3 个新 Reference 预处理器,可以直接根据图像生产…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

EtherNet/IP转DeviceNet协议网关详解

一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...

32单片机——基本定时器

STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...

node.js的初步学习

那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...