五、Redis五种常用数据结构-SET

news2024/10/6 6:51:19

RedisSet结构存储的数据和Java中的HashSet类似,都是无序且不重复的。其底层的数据结构有两种,一是当value为整数时,且数据量不大时采用intset来存储。其他情况使用dict字典存储。集合中最多存储232-1(40多亿)个数据。

1、常用命令

  • sadd key v1[v2,v3]:向集合中添加一个或者多个元素。重复的元素将被忽略。如果key不存在,将创建一个新的key,并将数据保存到key里面。
  • scard key:获取集合的数据量
  • sdiff key1[key2]:返回第一个集合和其他集合的区别(即第一个集合独有的元素)。
  • sdiffstore destionation key1[key2…]:返回第一个集合和其他集合的差集并存储在destination中。指定destination集合已存在将被覆盖。即原来的数据会被删除。
  • sinter key1[key2…]:返回给定集合的所有交集。
  • sinterstore destination key1[key2…]:返回指定集合的交集,并保存到destination中。如果destination已存在将会被覆盖。
  • sismember key member:判断member元素是否是集合key的元素。
  • smembers key:返回集合中的所有数据。
  • smove source destination member:将member数据从source移动到destination中。smove是原子操作。
  1. 如果source集合不存在或者不存在指定的member元素,smove命令不进行任何操作,只是返回0。否则member元素从source集合中删除,并添加到destination集合中。
  2. 当destination集合中已存在member元素时,smove命令只是删除source集合中的数据。
  • spop key:移出并返回集合中随机一个数据。
  • srandmember key[count]:返回集合中一个或者多个随机数
  • srem key member1[member2]:移出集合中一个或者多个元素,不存在则被忽略。
  • sunion key1 [key2]:返回所有给定集合中的并集。
  • sunionstore destination key1[key2]:所有给定集合的并集,并存储在destination中
  • sscan key cursor [MATCH pattern][COUNT count]:迭代集合中的元素。

2、底层结构

2.1、intset

结构
typedf struct intset{
	unint32_t encoding;//编码方式  有三种  默认 INSET_ENC_INT16
    unint32_t length;//集合元素的个数
    int8_t contents[];//实际存储元素的数组
}intset;
  • length字段记录了保存数据的contents中公有多少个元素
  • contents真正存数据的地方,数组都是按照从小到大有序排列的,并且不包含任何重复项

intset示意图如下:
image.png

使用条件
  1. 存储的数据都为整数
  2. 集合保存的数据个数不超过512个

以上任何一个条件不满足就会使用dict字典结构。

2.2、字典-dict

见Hash中的dict结构

3、总结

image.png

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

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

相关文章

Vue中引入Element组件、路由router、Nginx打包部署

目录 1、Element-ui(饿了么ui) 演示: 怎么打开NPM脚本? Vue路由router Nginx打包部署Vue-Cli项目 1、Element-ui(饿了么ui) element-ui(饿了么ui)是一个非常好用且美观的组件库(插件库),主要用于网站快速成型,由国产团队饿了么…

网工交换基础——VLAN Maping

一、定义 VLAN Maping通过修改报文携带的VLAN Tag来实现不同VLAN的相互映射。 二、应用场景 1、场景一:两个VLAN相同的二层用户网络通过骨干网络互联,为了实现用户之间的二层互通,以及二层协议(例如MSTP等)的统一部署…

如何内网穿透,远程访问内网设备

文章目录 0.前言1.准备工作2.内网穿透原理3.配置公网服务器的frp5.配置访问内网主机6.配置win10的远程桌面访问(win11类似)7.参考资料 0.前言 最近想研究一些新东西,公司的机器不敢乱搞,公司测试的服务器安装软件太多&#xff0c…

React - Input框绑定动态State和监听onChange事件,输入时失去焦点

React - Input框绑定动态State和监听onChange事件,输入时失去焦点 一. 案例复现二. 解决方案 一. 案例复现 案例代码如下: import React, { useState } from react; import { Table, Input } from antd; const Column Table.Column; const mockData …

CSP-j 计算机硬件

计算机系统 计算机系统由计算机硬件和软件两部分组成。硬件包括中央处理器、存储器和外部设备等;软件是计算机的运行程序和相应的文档。计算机系统具有接收和存储信息、按程序快速计算和判断并输出处理结果等功能。 主要技术指标 字长:字长是指CPU能够同…

anaconda虚拟环境pytorch安装

1.先创建conda的虚拟环境 conda create -n gputorch python3.102.激活刚刚创建好的虚拟环境 conda activate gputorch3.设置镜像源 这一步是后面安装pytorch相关包所需要的来源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple4.查看电脑的显卡…

【C++进阶】C++中的map和set

一、关联式容器 在初阶阶段,我们已经接触过STL 中的部分容器,比如: vector 、 list 、 deque, forward_list 等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本…

PyQt5的布局管理

文章目录 1.垂直布局和水平布局垂直布局(QVBoxLayout):水平布局(QHBoxLayout): 2. 布局中的addStrech2.1 我们首先看只有一个Strech的情况,比较容易理解2.2 两个Strech2.3 多个Strech 3.栅格布局…

linux下使用jexus部署aspnet站点

1.运行环境 Centos 7 安装dos2unix工具 yum install dos2unix 安装jexus curl https://jexus.org/release/x64/install.sh|sudo sh2.网站部署 2.1. 将windows下的网站发布包Msc_qingdao_admin.zip上传到linux中, 然后解压后放入/var/www(没有则创建)目录下 r…

二叉树的遍历(前序 中序 后序)

一、前序遍历 顺序为: 根-->左子树---->右子树 先访问根节点,再递归进入根节点的左子树(通过递归不断往下遍历),直到访问的节点没有左子树,此时递归进入其右子树(通过递归进行相同操作&a…

简单问题汇总

一、vector和list 1.vector vector是可变大小数组的序列容器,拥有一段连续的内存空间,并且起始地址不变,因此能高效的进行随机存取,时间复杂度为o(1);但因为内存空间是连续的,所以在进行插入和删除操作时…

机器学习算法应用——关联规则分析(4-4)

关联规则分析(4-4) 关联规则分析(Association Rule Mining)是一种基于频繁项集的分析方法,它以最常出现在一起的元素之间的关系作为分析对象,主要用于发掘大数据中隐藏的关联规则,是数据挖掘技术…

【吃透Java手写】4-Tomcat-简易版

【吃透Java手写】Tomcat-简易版-源码解析 1 准备工作1.1 引入依赖1.2 创建一个Tomcat的启动类 2 线程池技术回顾2.1 线程池的使用流程2.2 线程池的参数2.2.1 任务队列(workQueue)2.2.2 线程工厂(threadFactory)2.2.3 拒绝策略&…

求阶乘n!末尾0的个数溢出了怎么办

小林最近遇到一个问题:“对于任意给定的一个正整数n,统计其阶乘n!的末尾中0的个数”,这个问题究竟该如何解决? 先用n5来解决这个问题。n的阶乘即n!5!5*4*3*2*1120,显然应该为2个数相乘等于10才能得到一个结…

记录minio的bug(Object name contains unsupported characters.)

场景是我将后端服务从121.xxx.xxx.xxx服务器上转移到了另一台服务器10.xxx.xxx.xxx 但图片都还在121.xxx.xxx.xxx服务器上,同样我10.xxx.xxx.xxx也安装了minio并且我的后端服务配置的minio地址也是10.xxx.xxx.xxx 此时有一个业务通过minio客户端获取图片&#xf…

自动化中遇到的问题归纳总结

1、动态元素定位不到 解决方法:尽量使用固定元素定位,如没有固定元素,则采用绝对路径进行定位,因为元素路径是唯一且不变的 2、自动化脚本执行速度较慢 尽量使用css方法定位元素,使用等待时,少用sleep方…

websocket最大数量的限制问题

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

C++类和对象项目:斗地主残局(做为程序员怎么能被人机虐)

斗地主残局解析项目 项目工程化 由于这是一个项目,所以我们需要按照标准的项目工程化来进行设计。 分析大体框架 1. 如何读取牌 如何进行文件读取,可以参看我这篇博客:C语言笔记:文件操作 //创建两个数组进行存储自己和对手的牌 int a[MAX_N 5] {…

一文了解spring事务特性

推荐工具 objectlog 对于重要的一些数据,我们需要记录一条记录的所有版本变化过程,做到持续追踪,为后续问题追踪提供思路。objectlog工具是一个记录单个对象属性变化的日志工具,工具采用spring切面和mybatis拦截器相关技术编写了api依赖包&a…

【Java】HOT100+代码随想录 动态规划(上)背包问题

目录 理论基础 一、基础题目 LeetCode509:斐波那契数 LeetCode70:爬楼梯 LeetCode746:使用最小花费爬楼梯 LeetCode62:不同路径 LeetCode63:不同路径ii LeetCode343:整数拆分 LeetCode96:不…