redis集合若干记录

  1. 无序集合

    redis通常使用字典结构保存集合数据,字典健存储集合元素,字典值为空。如果一个集合全为整数,使用字典就有点浪费了,redis使用intset保存。

    1. 插入元素到intset中
      1. 获取插入元素编码,如果插入元素编码级别高于intset编码,intset的编码则需要升级
      2. 通过二分查找插入元素是否为重复插入,是,则插入失败,否,则赋值
      3. 为intset重新分配内存空间(分配插入元素所需空间),若插入位置存在后驱节点,后驱节点全部后移
      4. 更新intset的len值
    2. intset升级编码
      1. 设置新的编码,然后分配新的内存空间
      2. 将intset的元素移动到新位置
      3. 然后插入新的元素

    redis不会降级intset编码!

  2. 有序集合

    当数据都是有序的时候,则使用数组和链表进行存储。redis中的skiplist既能通过二分查找元素,又能快速插入数据

    1. skiplist

      skiplist是一个多层级链表结构。

      1. skiplist查找元素

        1. 当查找元素的时候需要从最高层进行查找。
        2. 如果存在后驱节点并且后驱节点小于目标值,则沿forward继续寻找。
        3. 如果节点等于目标值则返回,否则降一级查找。

        在这里插入图片描述 2. skiplist插入元素

        1. 查找每层插入位置的前驱节点
        2. 随机生成新节点的层数
        3. 新节点的层数比其他节点大的时候,skiplist需要添加新的层数
          1. 因为头层数需要大于等于其他节点的层数,所以要在头节点添加新的层,头节点新增的层为skiplist的长度。
          2. 因为skiplist的头节点预先就分配好了最大层内存,所以不用再分配内存
        4. 创建节点,遍历各层,插入新节点并更新前后节点的属性。
        5. 如果存在一个节点的层数比新节点的层数大,则其前驱节点的要加1
        6. 设置新节点的backward值,更新skiplist.length属性

    有序集合通过ziplist和skiplist存储元素,所以它有两种编码OBJ_ENCODING_ZIPLIST和OBJ_ENCODING_SKIPLIST。

    只有 有序集合元素数量小于或等于配置中的server.zset_max_ziplist_entries和有序集合元素长度小于或等于配置中的server.zset_max_ziplist_value时才使用ziplist存储有序集合。

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

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

相关文章

机器学习 之 sklearn的使用介绍和如何找到API

scikit-learn(简称 sklearn)是基于python语言的一个第三方机器学习库,它提供了简单而有效的工具来进行数据分析和建模。建立在numpy pandas SciPy和Malpotlib库上,下面是对如何使用 sklearn 以及如何找到其 API 的一个基本介绍&am…

仿RabbiteMq实现简易消息队列正式篇(需求分析)

TOC 目录 MQ的实现方法 RabbitMq中的相关概念 消息队列系统模块划分 总体划分 服务端模块 数据管理模块 虚拟机数据管理模块 交换机路由模块 消费者管理模块 信道(通信)管理模块 连接管理模块 服务端BrokerServer模块 客户端模块 消费者管…

MySQL-MVCC举例说明

在数据库系统中,多版本并发控制(MVCC, Multi-Version Concurrency Control) 是一种用于提高并发性能的机制,它允许多个事务同时读取和写入数据,而不会产生锁等待和阻塞的问题。MySQL 的 InnoDB 存储引擎广泛使用了 MVC…

Keepalived 高可用集群详解和配置

Keepalived 高可用集群 集群类型 1、LB(Load Balance):负载均衡 LVS:四层负载均衡 HAProxy:七层/四层 负载均衡 nginx:七层负载均衡 (http/upstream,stream/upstream) 2、HA(High Availa bili…

C++ 设计模式——工厂方法模式

工厂方法模式 工厂方法模式主要组成部分代码实现工厂方法模式模式的 UML 图工厂方法模式 UML 图解析优点和缺点适用场景 工厂方法模式 工厂方法模式是一种创建型设计模式,它通过定义一个接口用于创建对象,但由子类决定实例化哪个类。与简单工厂模式不同…

Spring项目:文字花园(三)

一.实现博客详情 1.后端逻辑代码 controller层添加方法&#xff08;根据博客id查看博客详情&#xff09; RequestMapping("/getBlogDetail")public Result<BlogInfo> getBlogDetail(Integer blogId){log.info("getBlogDetail, blogId: {}", blogId…

vue 后台管理 之 状态管理 vuex 的使用

幸福是一种能力 文章目录 一、数据驱动视图二、VueX 数据公共池 一、数据驱动视图 我们都知道 vue 之所以好用&#xff0c;是因为官方帮我们做了数据驱动视图初始化时将数据和视图进行绑定&#xff0c;通过 watcher 来监听数据的变化&#xff0c;当数据变化时&#xff0c;会触…

这三大创意神器,一个不用就是错过了一个小目标!

【导语】在这个充满无限可能的数字时代&#xff0c;创意成为了推动我们前行的强大动力。但你是否曾因视频背景杂乱无章而苦恼&#xff1f;是否渴望将静态图片瞬间赋予生命&#xff1f;又或是对模糊照片中的珍贵瞬间束手无策&#xff1f;今天&#xff0c;就让我们揭秘三大变态且…

Linux搭建环境:从零开始掌握基础操作(二)

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 软件测试第一步就是搭建测试环境&#xff0c;如何搭建好测试环境&#xff0c;需要具备两项的基础知识&#xff1a; 1、Linux 命令: 软件测试第一个任务, 一般都需要进行环境搭建, 一部分&#xff0c;环境搭建内容是在服…

Your local changes would be overwritten by merge git

方法二 直接覆盖本地的代码&#xff0c;放弃自己本地的改动&#xff0c;只保留服务器端代码 直接回退到上一个版本&#xff0c;再进行pull。 【步骤】 直接 VCS -> Git -> Reset HEAD… 选择需要的reset模式&#xff1a;hard&#xff08;即放弃本地代码&#xff0c;新修…

JavaScript基础——闭包

闭包简介 闭包的作用 闭包可以保留变量的状态 闭包可以让变量私有化 闭包的缺点 闭包简介 在JavaScript中&#xff0c;重复声明同一个变量会导致变量冲突&#xff0c;在这个时候可以使用闭包创建独立的执行环境。 在JavaScript中&#xff0c;闭包是指封闭的执行环境&#xff…

【图像去噪】论文精读:Toward Convolutional Blind Denoising of Real Photographs(CBDNet)

文章目录 前言Abstract1. Introduction2. Related Work2.1. Deep CNN Denoisers2.2. Image Noise Modeling2.3. Blind Denoising of Real Images 3. Proposed Method3.1. Realistic Noise Model3.2. Network Architecture3.3. Asymmetric Loss and Model Objective3.4. Trainin…

Spring IoCDI(下)—DI的尾声

我们之前学习了控制反转IoC&#xff0c;接下来就开始学习依赖注入DI的细节。 依赖注入是一个过程&#xff0c;是指IoC容器在创建Bean时&#xff0c;去提供运行时所依赖的资源&#xff0c;而资源指的就是对象。我们使用 Autowired 注解&#xff0c;完成依赖注入的操作。简单来说…

使用docker compose一键部署redis服务

使用docker compose一键部署redis服务 1、创建安装目录 mkdir /data/redis/ -p && cd /data/redis2、创建docker-compose.yml文件 version: 3 services:redis:image: registry.cn-hangzhou.aliyuncs.com/xiaopangpang/redis:7.0.5container_name: redisrestart: al…

【STM32项目】在FreeRtos背景下的实战项目的实现过程(二)

个人主页~ 实战项目的实现过程&#xff08;一&#xff09;~ 实战项目的实现过程 二、初步了解各个外设硬件1、OLED模块2、GPS模块3、MPU6050模块4、超声测距模块5、温度测控模块6、语音模块7、SIM模块8、按键模块 三、查阅资料1、查看手册2、查找例程 四、研究硬件功能1、OLED…

js使用run编码计算region的交集并集差集

所有shape都转为run编码 转为run编码后再运算可以节约大量内存 subtractIntervals 函数的逻辑:目前的实现假设了所有的 subIntervals 都会与 intervals 完全重叠,这可能导致计算不准确。应该将 subIntervals 从 intervals 中去除时,考虑到可能的部分重叠。 差集计算:sub…

双剑合璧,网络无敌!Windows Server 2012 R2双网卡绑定实战教程

文章目录 双剑合璧&#xff0c;网络无敌&#xff01;Windows Server 2012 R2双网卡绑定实战教程1 背景信息2 配置步骤2.1 登录服务器2.2 分别清除两块网卡的配置2.3 进入“本地服务器”界面2.4 进入“NIC组合”界面2.5 创建网卡绑定组2.6 设置新建组参数2.7 查看已创建的网卡组…

【kubernetes】k8s配置资源管理

一、ConfigMap资源配置 ConfigMap保存的是不需要加密配置的信息 ConfigMap 功能在 Kubernetes1.2 版本中引入&#xff0c;许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API 给我们提供了向容器中注入配置信息的机制&#xff0c;ConfigMap 可以被…

银河麒麟V10+qt5,12.11编译mysql驱动连接OceanBase数据库

1、下载mysql数据库,解压后里面包含编译所需要的lib和include文件夹,下载地址:https://www.mysql.com/downloads/ 选择适合自己系统的版本: 解压后的文件夹中包含需要的lib和include文件夹: 使用qt打开mysql源码项目: 根据自己qt安装路径,找到项目: 注释掉如图: …

C++STL之string类:相关习题解析

目录 1&#xff0c;字符串转整型数字 2&#xff0c;字符串最后一个单词的长度(getline的使用) 3&#xff0c;仅仅反转字母 4&#xff0c;字符串中的第一个唯一字符(找字符串中第一个只出现一次的字符) 5&#xff0c;验证回文串 6&#xff0c;验证回文串|| 7&#xff0c;…