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

Redis:set类型

Redis:set类型

    • set命令
        • SADD
        • SMEMBERS
        • SISMEMBER
        • SCARD
        • SPOP
        • SRANDMEMBER
        • SMOVE
        • SREM
      • 集合间操作
        • SINTER
        • SINTERSTORE
        • SUNION
        • SUNIONSTORE
        • SDIFF
        • SDIFFSTORE
    • 内部编码
      • intset
      • hashtable


当把一些关联的数据放到一起,就构成一个集合。在Redis中,使用set类型维护集合。set维护一个不允许重复元素的无序集合,每个集合元素类型都是String


set命令

SADD
  • 将一个或多个元素添加到set中,如果不存在则创建一个集合
sadd key member [member ...]

返回本次操作添加成功的元素个数。

示例:

在这里插入图片描述

第一次saddset1不存在,此时创建集合并且插入1 2 3,返回3表示成功插入三个数字。第二次sadd,由于数字2 3已经存在,所以只插入了4 5,返回2表示成功插入两个元素。


SMEMBERS
  • 获取set中的所有元素
smembers key

示例:

查询刚才创建的set1

在这里插入图片描述


SISMEMBER
  • 判定元素是否在集合中
sismember key member

如果存在返回1,不存在返回0

示例:

在这里插入图片描述


SCARD
  • 获取集合的元素个数
scard key

返回集合的元素个数。


SPOP
  • 随机获取并删除一个或多个元素
spop key [count]

返回获取到的元素。

示例:

在这里插入图片描述

第一次spop获取元素4,既不是头也不是尾,第二次spop又得到两个随机值5 1,确实值是随机的。

官方文档中声明,spop得到的值是随机的,就算是两个相同的集合,同样的操作得到的值也不一样。因为Redis源码中给spop增加了一个生成随机成员的过程,是真正做了随机功能。


SRANDMEMBER
  • 获取set中的随即元素
srandmember key [count]

返回随机获取到的元素,count表示要获取的元素个数。

示例:

在这里插入图片描述


SMOVE
  • 将一个元素从源set移动到目的set
smove source destination member

其中source是源集合,destination是目的集合,member是被移动的元素。返回0表示移动失败,返回1表示成功。

示例:

在这里插入图片描述

此处将set2中的666元素移动到了set1中。

在移动过程中,可能出现以下两种情况:

  1. member已经在destination中存在,此时会将membersource中删除,并且spop返回1视为移动成功
  2. membersource中不存在,此时spop返回0,表示移动失败

SREM
  • 删除set中的指定元素
srem key member [member ...]

返回删除成功的元素个数。


集合间操作

除了基本的集合命令,Redis还提供了集合之间的一些命令。

SINTER
  • 对多个集合求交集
sinter key [key ...]

返回集合之间的交集。

示例:

在这里插入图片描述


SINTERSTORE
  • 求出多个集合的交集,并输出到destination
sinterstore destination key [key ...]

返回交集的元素个数。

示例:

在这里插入图片描述

此处将set1set2的交集输出到set4中,sinterstore返回3表示交集有三个元素。


SUNION
  • 得到多个set的并集
sunion key [key ...]

返回多个集合的并集。

在这里插入图片描述


SUNIONSTORE
  • 求出多个集合的并集,并输出到destination
sunionstore destination key [key ...]

返回并集中元素的个数。


SDIFF
  • 求出多个集合的差集
sdiff key [key ...]

返回差集的结果。

示例:

在这里插入图片描述

此处要注意,做差是有先后顺序的,set1 - set2set2 - set1的结果是不一样的。


SDIFFSTORE
  • 求出多个集合的差集,并输出到destination
sdiffstore key [key ...]

返回差集中元素的个数。


  • 总结
命令功能
sadd添加元素
srem删除元素
scard获取集合元素个数
sismember检测元素是否在集合中
srandmember获取随机集合元素
spop随机删除集合元素
smembers获取集合所有元素
sinter集合求并集
sinterstore集合求并集,输出到指定集合
sunion集合求交集
sunionstore集合求交集,输出到指定集合
sdiff集合求差集
sdiffstore集合求差集,输出到指定集合

内部编码

intset

整数集合,对正数进行了特定优化。当set中的元素都是整数,并且元素个数小于set-max-intset-entries(默认512个)时,Redis使用intset实现set


hashtable

当集合类型不满足以上条件,也就是成员数量太多,或者有成员不是int,那么采用hashtable哈希表来实现set


相关文章:

Redis:set类型

Redis:set类型 set命令SADDSMEMBERSSISMEMBERSCARDSPOPSRANDMEMBERSMOVESREM 集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 内部编码intsethashtable 当把一些关联的数据放到一起,就构成一个集合。在Redis中,使用set类型维护…...

九大排序之插入排序

1.前言 插入排序是把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。实际中我们玩扑克牌时,就用了插入排序的思想。 本章重点:主要着重的介绍两种插入排序…...

DNABERT: 一个基于 Transformer 双向编码器表征的预训练 DNA 语言模型

本文结合 DNABERT 的原文,主要介绍了: Overview of DNABERT 开发 DNABERT 的背景 DNABERT 的 tokenization DNABERT 的模型架构 DNABERT 的预训练 基于微调 DNABERT 的应用 1. Overview of DNABERT 我们之前介绍了 BERT,它是一个基于 Transfo…...

基于Hive和Hadoop的电商消费分析系统

本项目是一个基于大数据技术的电商消费分析系统,旨在为用户提供全面的电商消费信息和深入的消费行为分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出,以 S…...

记一次炉石传说记牌器 Crash 排查经历

大家好这里是 Geek技术前线。最近在打炉石过程中遇到了HSTracker记牌器的一个闪退问题,尝试性排查了下原因。这里简单记录一下 最近炉石国服回归;由于设备限制,我基本只会在 Mac 上打炉石。并且由于主要打竞技场,所以记牌器是必不…...

精益驱动的敏捷开发

1. 什么是精益?精益能给软件开发带来什么? 精益是一种起源于制造业的管理哲学,尤其是从丰田的生产体系中发展而来。它的核心目标是通过最小化浪费、提高效率和优化流程来实现高效的生产。精益的核心原则包括: 消除浪费&#xff…...

SolidWorks机器转ROS2 URDF

文章目录 开发环境SolidWords插件使用生成urdf文件之后的处理CMakeLists文件修改package.xml变更Launch更改运行 开发环境 Linux系统:Ubuntu 22.04 Ros2版本:humble Solidwords版本:2023 (2019以上版本应该都是可以的&#xff09…...

(Linux驱动学习 - 6).Linux中断

一. Linux 中断 API 函数 1.中断号 每个中断都有一个中断号,通过中断号即可区分不同的中断,有的资料也把中断号叫做中 断线。在 Linux 内核中使用一个 int 变量表示中断号。 2.申请中断 - request_irq 函数原型: int request_irq(unsigne…...

SpringBoot驱动的明星周边产品电商解决方案

1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…...

C++、Ruby和JavaScript

C C最初被称为带类的C, 兼容C的语法,此既是C得以流行的前提,也是C某些语法被捆绑的根源。C的来源于C语言的递增运算符,代表增加,意义为扩展。 C的历史 C类的设计思想来源于Simula. Simula为模拟的意思,被称为最早的面向…...

32单片机 低功耗模式

以下是一个基于STM32的低功耗模式示例代码,展示如何将STM32微控制器置于低功耗模式,并在特定条件下唤醒它。这个示例使用的是STM32 HAL库。 ### 示例代码:进入睡眠模式并使用外部中断唤醒 c #include "stm32f4xx_hal.h" // 函数声明…...

501、二叉搜索树中的众数

1、题目描述 . - 力扣(LeetCode) 要求:给一个包含重复值的BST,找出并返回BST中的众数(出现频次最高的元素)。 注:如果树中有不止一个众数可以按任意顺序返回,即如果有多个众数多个都要返回。 ps&#xff1…...

【洛谷】P2330 [SCOI2005] 繁忙的都市 的题解

【洛谷】P2330 [SCOI2005] 繁忙的都市 的题解 题目传送门 题解 水最小生成树,发现可以水一堆黄题qaq 这题显然就是求最大边权最小的生成树,而用 Kruskal 很容易证明这就是最小生成树,考虑一下这个算法每次取的都是不构成环的最小边即可&a…...

第18场小白入门赛(蓝桥杯)

第 18 场 小白入门赛 6 武功秘籍 考察进制理解。 对于第 i i i 位,设 b i t i x bit_ix biti​x ,每一位的最大值是 b j b_j bj​ ,也就是说每一位是 b j 1 b_j1 bj​1 进制 ,那么第 i i i 位的大小就是 x ∑ j i 1…...

Redission · 可重入锁(Reentrant Lock)

前言 Redisson是一个强大的分布式Java对象和服务库,专为简化在分布式环境中的Java开发而设计。通过Redisson,开发人员可以轻松地在分布式系统中共享数据、实现分布式锁、创建分布式对象,并处理各种分布式场景的挑战。 Redisson的设计灵感来…...

初阶C语言-指针

1.指针是什么? 理解指针的两个要点: 1.指针是内存中一个最小单元的编号,也就是地址 2.口头语中说的指针,通常是指指针变量,是用来存放内存地址的变量 总结:指针就是地址,口语中说的指针通常是指…...

论文笔记:微表情欺骗检测

整理了AAAI2018 Deception Detection in Videos 论文的阅读笔记 背景模型实验可视化 背景 欺骗在我们的日常生活中很常见。一些谎言是无害的,而另一些谎言可能会产生严重的后果。例如,在法庭上撒谎可能会影响司法公正,让有罪的被告逍遥法外。…...

智能家居有哪些产品?生活中常见的人工智能有哪些?

智能家居有哪些产品? 1、智能照明设备类:智能开关、智能插座、灯控模块、智能空开、智能灯、无线开关。 2、家庭安防类:智能门锁、智能摄像机、智能猫眼、智能门铃。 3、智能传感器类:烟雾传感器、可燃气体传感器、水浸传感器、声光报警器…...

洗车行软件系统有哪些 佳易王洗车店会员管理系统操作教程#洗车店会员软件试用版下载

一、前言 【试用版软件下载可点击本文章最下方官网卡片】 洗车行软件系统有哪些 佳易王洗车店会员管理系统操作教程#洗车店会员软件试用版下载 洗车管理软件应用是洗车业务的得力助手,实现会员管理及数据统计一体化,助力店铺高效、有序运营。 洗车项…...

【Java】springboot 项目中出现中文乱码

在刚创建的springboot项目中,出现乱码,跟走着解决一下 1、Ctrl Shift S 打开idea设置,根据图片来,将③④这三个地方都修改为UTF-8 2、返回配置查看,解决...

开放式耳机是什么意思?漏音吗?开放式的运动蓝牙耳机推荐

目前运动耳机市场主要分为入耳式、骨传导和开放式三类。入耳式耳机占比30%-40%,虽目前占比较大,但因在运动场景下有闷塞感、出汗不适、屏蔽外界环境音带来安全隐患等缺点,占比会逐渐下降。 骨传导耳机占比也为30%-40%,其不堵塞耳…...

如何优雅的处理NPE问题?

1.什么是NPE? NPE,即NullPointerException,是开发中最常见的问题之一,有必要知道如何正确地处理NPE。 对于 Java 开发者来说,null 是一个令人头疼的类型,一不小心就会发生 NPE (空指针&#xf…...

k8s 中存储之 NFS 卷

目录 1 NFS 卷的介绍 2 NFS 卷的实践操作 2.1 部署一台 NFS 共享主机 2.2 在所有k8s节点中安装nfs-utils 2.3 部署nfs卷 2.3.1 生成 pod 清单文件 2.3.2 修改 pod 清单文件增加 实现 NFS卷 挂载的 参数 2.3.3 声明签单文件并查看是否创建成功 2.3.4 在 NFS 服务器 创建默认发布…...

Redis中BitMap实现签到与统计连续签到功能

服务层代码 //签到Overridepublic Result sign() {//1.获取当前登录的用户Long userId UserHolder.getUser().getId();//获取日期LocalDateTime now LocalDateTime.now();//拼接keyString keySuffix now.format(DateTimeFormatter.ofPattern(":yyyyMM"));String …...

【Spring】“请求“ 之传递 JSON 数据

文章目录 JSON 概念JSON 语法JSON 的语法JSON 的两种结构 JSON 字符串和 Java 对象互转JSON 优点传递 JSON 对象 JSON 概念 JSON:JavaScript Object Notation【JavaScript 对象表示法】 JSON 就是一种数据格式,有自己的格式和语法,使用文本…...

文心一言 VS 讯飞星火 VS chatgpt (359)-- 算法导论24.3 1题

一、在图 24-2上运行Dijkstra算法,第一次使用结点 s s s作为源结点,第二次使用结点 z z z作为源结点。以类似于图 24-6 的风格,给出每次while循环后的 d d d值和 π π π值,以及集合 S S S中的所有结点。如果要写代码&#xff0c…...

Redis-预热雪崩击穿穿透

预热雪崩穿透击穿 缓存预热 缓存雪崩 有这两种原因 redis key 永不过期or过期时间错开redis 缓存集群实现高可用 主从哨兵Redis Cluster开启redis持久化aof,rdb,尽快恢复集群 多缓存结合预防雪崩:本地缓存 ehcache redis 缓存服务降级&…...

jvisualvm学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程:封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…...

Gazebo环境下开源UAV与USV联合仿真平台

推荐一个ROS2下基于Gazebo环境的开源UAV与USV联合仿真平台。平台是由两个开源项目共同搭建的。首先是UAV仿真平台,是基于PX4官方仿真平台(https://docs.px4.io/main/en/sim_gazebo_gz);其次是USV仿真平台,是基于VRX仿真…...

Linux进程调度和进程切换

并行(Parallel) 含义:并行是指多个任务在同一时刻同时执行。 硬件要求:需要多个处理器(如多核CPU)或者多台计算设备来实现,这些执行单元能够真正地同时处理不同的任务。例如,一个具…...