关于Redis底层的两个问题

1. 为什么Redis不共享包含字符串的对象?

当服务器考虑将一个共享对象设置为键的值对象时,程序首先需要检查给定的共享对象和键想要创建的目标对象是否完全相同,只有在共享对象和目标对象完全相同的情况下,程序才会将共享对象用作键的值对象,而一个共享对象保存的值越复杂,验证共享对象和目标对象是否相同所需的复杂度就越高,消耗的CPU时间也越多:

  • 如果共享对象是保存整数值的字符串对象,那么验证操作的复杂度为O(1);
  • 如果共享对象是保存字符串值的字符串对象,那么验证操作的复杂度为O(N);
  • 如果共享对象是保存了多个值(或者对象)的对象,如果列表对象或者哈希对象,那么验证操作的复杂度将会是O(N^2);

因此,尽管共享更复杂的对象是可以节约更多的内存,但受到CPU时间的限制,Redis只对白喊整数值的字符串对象进行共享。

2. 为什么有序集合需要同时使用跳跃表和字典来实现?

在理论上,有续集和可以单独使用字典或者跳跃表的其中一种数据结构来实现,但是无论单独使用字典还是跳跃表,在性能上对比起同时使用字典和跳跃表都会有所降低。

举个例子:如果我们只是使用字典来实现有序集合,那么虽然以O(1)复杂度查找成员的分值这一特性会被保留,但是因为字典以无序的方式来保存集合元素,所以每次在执行范围型操作——比如ZRANK、ZRANGE等命令时,程序都需要对字典保存的所有元素进行排序,完成这种排序至少需要O(NlogN)时间复杂度,以及额外的O(N)空间复杂度(因为要创建一个数组来保存排序后的元素)。

另一方面,如果我们只使用跳跃表来实现有序集合,那么跳跃表执行范围型操作的所有优点都会被保留,但是因为没有了字典,所以根据成员查找分值这一操作的复杂度将从O(1)上升到O(logN)。

以为以上原因,为了让有序集合的查找的范围型操作都尽可能快地执行,Redis选择了同时使用字典和跳跃表两种数据结构来实现有序集合。

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

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

相关文章

SOEM主站开发篇(3):为APP程序添加命令

0 工具准备 1.SOEM-1.4.0源码(官网:http://openethercatsociety.github.io/) 2.Linux开发板(本文为正点原子I.MX6U ALPHA开发板) 3.交叉编译工具(arm-linux-gnueabihf-gcc) 4.cmake(版本不得低于3.9,本文为3.9.2) 5.Ubuntu 16.04(用于编译生成Linux开发板的可执行文…

【追求卓越06】算法--递归

引导 递归算法算是我们比较常用的一种算法。但是想用好并不简单。本章我不再介绍简单的概念,主要讲解递归算法的优缺点和如何用递归写代码。 个人爱好 其实相对于使用while循环,我更喜欢使用递归算法。为什么呢? 使用递归算法代码往往会变…

Java语言中的控制流程

控制流程是编程中的重要概念之一,它允许程序根据条件执行不同的代码块或重复执行特定的代码块。在Java中,控制流程由条件语句和循环语句组成。本文将详细介绍Java中的条件语句(if语句和switch语句)和循环语句(for循环、…

MySQL用户与权限管理

快捷查看指令 ctrlf 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改) MySQL用户与权限管理 登录 #本地登录 mysql -uroot -p123456#远程登录 #客户端语法:mysql -…

聚观早报 |快手Q3营收;拼多多杀入大模型;Redmi K70E开启预约

【聚观365】11月23日消息 快手Q3营收 拼多多杀入大模型 Redmi K70E开启预约 华为nova 12系列或下周发布 亚马逊启动“AI就绪”新计划 快手Q3营收 财报显示,快手第三季度营收279亿元,同比增长20.8%;期内盈利21.8亿元,去年同期…

猫罐头多久喂一次?好用的猫罐头牌子推荐

猫爱吃猫罐头,包含各种美味,提供营养和口感。但喂猫吃罐头需技巧和耐心,以确保猫健康快乐成长。 作为一个从业宠物营养师7年的人,可以说对于猫咪的食物很有研究和猫罐头品牌选购上,我有自己的见解。 一、猫罐头多久喂…

shell之wc命令

shell之wc命令 Linux中的wc命令是一个用于统计给定文件中的字节数、字数和行数的工具。它也可以从标准输入读取数据并统计。 wc命令的语法为: wc [选项] 文件... 如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。wc命令的选…

40、Flink 的Apache Kafka connector(kafka source 和sink 说明及使用示例) 完整版

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

循环神经网络(RNN)实现股票预测

文章目录 一、前言二、前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据 四、数据预处理1.归一化2.设置测试集训练集 五、构建模型六、激活模型七、训练模型八、结果可视化1.绘制loss图2.预测3.评估 一、前言 我的环境: 语言环…

【Rust】快速教程——一直在单行显示打印、输入、文件读写

前言 恨不过是七情六欲的一种,再强大的恨也没法独占整颗心,总有其它情感隐藏在心底深处,说不定在什么时候就会掀起滔天巨浪。——《死人经》 图中是Starship扔掉下面的燃料罐,再扔掉头顶的翅膀后,再翻转过来着陆火星的…

Andorid : Toast(弹出框)- 简单应用

Toast Android官方在Android API 30版本(或更高版本)之后即对该方法不生效。 只要SDK版本低于30,Toast.setGravity()方法即可生效 MainActivity.java package com.example.mytoast;import androidx.appcompat.app.AppCompatActivity;import android.content.Cont…

[C++ 从入门到精通] 13.派生类、调用顺序、继承方式、函数遮蔽

📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…

SOEM主站开发篇(2):添加SOEM主站APP程序

0 工具准备 1.SOEM-1.4.0源码(官网:http://openethercatsociety.github.io/) 2.Linux开发板(本文为正点原子I.MX6U ALPHA开发板) 3.交叉编译工具(arm-linux-gnueabihf-gcc) 4.cmake(版本不得低于3.9,本文为3.9.2) 5.Ubuntu 16.04(用于编译生成Linux开发板的可执行文…

【Unity细节】Default clip could not be found in attached animations list.(动画机报错)

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏:unity细节和bug 😶‍🌫️优质专栏 ⭐【…

生产制造业如何谋求数字化转型?需要哪些信息化系统做支撑?

生产制造业的数字化转型是将数字系统和各种技术整合到传统制造流程中的过程,这将导致行业格局的重大变革。工业4.0的到来为制造业开创了一个新时代,制造商可以简化生产线,提高整体效率。同时,这一技术革命使他们能够收集到大量的数…

计算机网络实用工具之tcpdump

简介 tcpdump是一个运行在命令行下的数据包分析器。能够获取到该计算机发送或接收的TCP/IP和其他数据包。 tcpdump 适用于大多数的类Unix操作系统,包括Linux、Solaris、BSD、Mac OS X、HP-UX和AIX 等等。在这些系统中,tcpdump 需要使用libpcap这个捕捉…

Altium Designer学习笔记9

忽视了一个最大的问题,就是元器件的封装,不应该是根据AD系统的封装走,而应该是根据立创商城上的规格书,确认每个封装的大小,画出封装图,然后才是布局和走线。 1、确认电容的封装采用0805,贴片电…

【css】Google第三方登录按钮样式修改

文章目录 场景前置准备修改样式官方属性修改样式CSS修改样式按钮的高度height和border-radiusLogo和文字布局 场景 需要用到谷歌的第三方登录,登录按钮有自己的样式。根据官方文档:概览 | Authentication | Google for Developers,提供两种第…

局域网协议:地址解析协议(ARP,Address Resolution Protocol)

地址解析协议(ARP,Address Resolution Protocol)是一种用于在IP网络中将IP地址映射到物理MAC地址的协议。在IP网络中,IP是用于寻址,真正将数据包从一个设备发送到另外一个设备,用于通信的是物理MAC地址。 …

40、Flink 的Apache Kafka connector(kafka sink的介绍及使用示例)-2

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…