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 ...]
返回本次操作添加成功的元素个数。
示例:

第一次sadd,set1不存在,此时创建集合并且插入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中。
在移动过程中,可能出现以下两种情况:
member已经在destination中存在,此时会将member从source中删除,并且spop返回1视为移动成功member在source中不存在,此时spop返回0,表示移动失败
SREM
- 删除
set中的指定元素
srem key member [member ...]
返回删除成功的元素个数。
集合间操作
除了基本的集合命令,Redis还提供了集合之间的一些命令。
SINTER
- 对多个集合求交集
sinter key [key ...]
返回集合之间的交集。
示例:

SINTERSTORE
- 求出多个集合的交集,并输出到
destination中
sinterstore destination key [key ...]
返回交集的元素个数。
示例:

此处将set1和set2的交集输出到set4中,sinterstore返回3表示交集有三个元素。
SUNION
- 得到多个
set的并集
sunion key [key ...]
返回多个集合的并集。

SUNIONSTORE
- 求出多个集合的并集,并输出到
destination中
sunionstore destination key [key ...]
返回并集中元素的个数。
SDIFF
- 求出多个集合的差集
sdiff key [key ...]
返回差集的结果。
示例:

此处要注意,做差是有先后顺序的,set1 - set2和set2 - 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. 什么是精益?精益能给软件开发带来什么? 精益是一种起源于制造业的管理哲学,尤其是从丰田的生产体系中发展而来。它的核心目标是通过最小化浪费、提高效率和优化流程来实现高效的生产。精益的核心原则包括: 消除浪费ÿ…...
SolidWorks机器转ROS2 URDF
文章目录 开发环境SolidWords插件使用生成urdf文件之后的处理CMakeLists文件修改package.xml变更Launch更改运行 开发环境 Linux系统:Ubuntu 22.04 Ros2版本:humble Solidwords版本:2023 (2019以上版本应该都是可以的)…...
(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࿱…...
【洛谷】P2330 [SCOI2005] 繁忙的都市 的题解
【洛谷】P2330 [SCOI2005] 繁忙的都市 的题解 题目传送门 题解 水最小生成树,发现可以水一堆黄题qaq 这题显然就是求最大边权最小的生成树,而用 Kruskal 很容易证明这就是最小生成树,考虑一下这个算法每次取的都是不构成环的最小边即可&a…...
第18场小白入门赛(蓝桥杯)
第 18 场 小白入门赛 6 武功秘籍 考察进制理解。 对于第 i i i 位,设 b i t i x bit_ix bitix ,每一位的最大值是 b j b_j bj ,也就是说每一位是 b j 1 b_j1 bj1 进制 ,那么第 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、返回配置查看,解决...
从医院PACS到你的Python脚本:手把手教你用pydicom库读写和修改DICOM文件
从医院PACS到Python脚本:pydicom实战医学影像处理指南 医学影像数据正以每年30%的速度增长,而DICOM作为医疗影像存储与传输的国际标准,承载着CT、MRI等设备产生的海量数据。在临床研究、AI模型训练和医疗信息化建设中,开发者经常需…...
开发上下文管理工具:原理、实现与工程实践
1. 项目概述:一个为开发者量身定制的上下文管理工具如果你和我一样,每天要在多个项目、多种技术栈、甚至多个开发环境之间反复横跳,那你一定对“上下文切换”这个词深恶痛绝。我说的不是操作系统的上下文切换,而是我们开发者大脑里…...
OpenUPM安全最佳实践:保护你的Unity包注册表完全指南 [特殊字符]
OpenUPM安全最佳实践:保护你的Unity包注册表完全指南 🔒 【免费下载链接】openupm OpenUPM - Open Source Unity Package Registry (UPM) 项目地址: https://gitcode.com/gh_mirrors/op/openupm OpenUPM作为开源Unity包管理器(UPM&…...
基于HPM5E00与LAN9252的EtherCAT从站开发板全流程实战
1. 项目概述:从零到一,打造专属的 EtherCAT 从站开发板 最近在工业自动化圈子里,EtherCAT 的热度一直居高不下。它那近乎实时的通讯性能、灵活的拓扑结构,让它在运动控制、机器人、高端数控机床等领域成了“香饽饽”。但很多开发者…...
Rust嵌入式开发实战:开源机械爪控制库openclaw-rs架构解析与应用
1. 项目概述:当Rust遇上开源机械爪最近在逛GitHub的时候,偶然发现了一个挺有意思的项目——neul-labs/openclaw-rs。光看名字,你大概能猜到它是个用Rust语言写的、跟机械爪(Claw)相关的开源项目。没错,这正…...
靠谱的openai claudecode AI中转站
各位大神开发都用那些模型?最近用Trae的模型一下就降智,切换到apikeyfun.com 用了ops4.7和gpt5.5简直是降维打击,速度快,还不错!...
Arduino Audio Tools终极指南:从音频新手到专业开发者的完整解决方案
Arduino Audio Tools终极指南:从音频新手到专业开发者的完整解决方案 【免费下载链接】arduino-audio-tools Arduino Audio Tools (a powerful Audio library not only for Arduino) 项目地址: https://gitcode.com/gh_mirrors/ar/arduino-audio-tools 在嵌入…...
Ubuntu 18.04.6 从零到一:新手避坑与高效配置实战指南
1. 为什么选择Ubuntu 18.04.6? Ubuntu 18.04.6是长期支持版本(LTS)的最终更新,特别适合需要稳定系统的用户。相比最新版本,它的软件生态更成熟,社区支持更完善。我实测发现,这个版本对老硬件兼容…...
用Logisim从零搭建MIPS CPU:我的计组课设通关实录(附完整电路文件)
从零构建MIPS CPU:一位计算机系学生的Logisim实战指南 1. 为什么选择Logisim搭建MIPS CPU 作为一名计算机专业的学生,第一次接触计算机组成原理课程设计时,面对"用Logisim搭建MIPS CPU"这个任务,我既兴奋又忐忑。兴奋的…...
3个简单步骤彻底解决GitHub下载龟速问题:Fast-GitHub插件完全指南
3个简单步骤彻底解决GitHub下载龟速问题:Fast-GitHub插件完全指南 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 你是…...
