码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Redis】集合对象和有序集合对象


    无序集合

    • 集合对象的编码可以是intset 或者 hashtable

    • intset 编码的集合对象使用整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合里面
      在这里插入图片描述

    • hashtable编码的集合对象使用字典作为底层实现,字典的每个键都是一个字符串对象,每个字符串对象包含了一个集合元素,而字典的只则全部被设置为NULL
      在这里插入图片描述

    • 编码转换的规则

      • 当集合对象可以同时满足以下两个条件时,对象使用intset 编码
        • 集合对象保存的元素都是整数值
        • 集合对象保存的元素不能超过512个
      • 反之,则使用hashtable 实现
      • 强调一下,如上规则可以修改参数 set-max-intset-entries
      • 当使用intset编码所需的以上两个条件的任意一个不能被满足时,对象的编码转换操作就会被执行 ,编码也会从intset 变成 hashtable

    有序集合

    • 有序集合的编码可以是ziplist或者skiplist

      • ziplist编码的有序集合对象使用压缩列表作为底层实现,每个集合元素使用两个紧挨在一起的压缩列表节点来保存,第一个节点保存元素的成员(member),而第二个元素则保存元素的分值
      • 压缩列表内的集合元素按分值从小到大进行排序,分值较小的元素被放置在靠近表头的位置,而分值较大的元素则被放置在靠近表尾的位置
        在这里插入图片描述
      • skiplist编码的有序集合对象中的集合元素按照分值从小到大进行排序每个跳跃表节点都保存一个集合元素和分值
      • 每个元素的分值都是一个double类型的浮点数
      • 需要说明的是,虽然同时使用跳跃表和字典保存有序集合元素,但是两种数据结构都会通过指针共享相同的元素和分值,避免浪费额外的内存
        在这里插入图片描述
        在这里插入图片描述
    • 编码转换的规则

      • 当集合对象可以同时满足以下两个条件时,对象使用ziplist 编码
        • 有序集合对象保存的元素小于128个
        • 有序集合保存的所有元素成员的长度都小于64字节
      • 反之,则使用skiplist 实现
      • 强调一下,如上规则可以修改参数 zset-max-ziplist-entries 和 zset-max-ziplist-value
      • 当使用ziplist编码所需的以上两个条件的任意一个不能被满足时,对象的编码转换操作就会被执行 ,编码也会从ziplist 变成 skiplist
    • 为什么有序集合需要同时使用跳跃表和字典来实现呢?

      • 主要是从性能上来讲,跳跃表适合范围查找,字典则使用元素直接获取数据,字典是无序的,所以需要额外开辟新的内存空间进行排序。
  • 相关阅读:
    数据化运营09 抓住问题关键:用相关性分析拆解多个影响因素
    Word文档里有空白但无法打字怎么回事?
    process.nextTick和vue的nextTick区别
    (五)算法基础——分治
    IDEA工具第一篇:细节使用-习惯设置
    代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
    Java中的多线程概述、多线程实现、线程类常见的方法与线程安全问题详细使用(多线程上篇含Lock锁同步方法同步代码块)
    论文作图之高压缩比导出PDF
    深入理解多线程(第二篇)
    spark 读取本地文件
  • 原文地址:https://blog.csdn.net/weixin_40172337/article/details/127131537
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号