「Redis」1. 数据类型的底层实现

news/2024/7/5 2:57:19

前言:在这篇博文中,我们将简单总结在面试中怎么回答Redis数据类型的底层实现。
因为面试时间就那么点,言简意赅的描述自己会的知识显得尤为重要‼️


文章目录

    • 0.1. String 的底层实现原理
    • 0.2. 列表的底层实现原理
    • 0.3. 字典的底层实现原理
    • 0.4. 集合的底层实现
    • 0.5. 有序集合的底层实现


🚀 作者简介:作为某云服务提供商的后端开发人员,我将在这里与大家简要分享一些实用的开发小技巧。在我的职业生涯中积累了丰富的经验,希望能通过这个博客与大家交流、学习和成长。技术栈:Java、PHP、Python、Vue、React


本文收录于三木的🔥「面试」这个专栏的灵感来自于许多粉丝私信,大家向我咨询有关面试的问题和建议。我深感荣幸和责任,希望通过这个专栏,能够为大家提供更多关于面试的知识、技巧和经验。我们将一起探讨面试。期待粉丝们ssp的offer喜讯。

🎈 「Java探索者之路」系列专栏,这个专栏旨在引领Java开发者踏上一段真正探索Java世界的旅程。
我们将深入探讨Java编程的方方面面,从基础知识到高级技巧,从实践案例到最新趋势,帮助你成为一名卓越的Java探索者。如果有想进入Java后端领域工作的同学,这个专栏会对你有所帮助,欢迎关注起来呀
🌼 本人也会持续的去关注AIGC以及人工智能领域的一些动向并总结到博客中,大家感兴趣的可以关注一下我的「AI」专栏
🌊 「Python爬虫」的入门学习系列,大家有兴趣的可以看一看


🌹一起学习,互三互访,顺评论区有访必回,有关必回!!!


0.1. String 的底层实现原理

String 主要有三种编码方式:int、embstr、raw,当字符串是一个可以用长整型(64位有符号整数)表示的时候,采用 int编码;当字符串长度小于45字节时(redis5),采用 embstr编码,其余情况使用 raw编码。
int
Redis 启动时会预先建立 10000 个分别存储 0~9999 的 redisObject 变量作为共享对象,这就意味着如果 set字符串的键值在 0~10000 之间的话,则可以 直接指向共享对象 而不需要再建立新对象,此时键值不占空间!
在这里插入图片描述

embstr
顾名思义即:embedded string,表示嵌入式的String。从内存结构上看是字符串 sds结构体与其对应的 redisObject 对象分配在 同一块连续的内存空间,这就仿佛字符串 sds 嵌入在 redisObject 对象之中一样,这一切从下面的代码即可清楚地看到:
在这里插入图片描述

raw
与上面的 OBJ_ENCODING_EMBSTR 编码方式的不同之处在于 此时动态字符串 sds 的内存与其依赖的 redisObject 的 内存不再连续,需要申请两次内存。

0.2. 列表的底层实现原理

列表对象的编码有两种,分别是:ziplist、linkedlist。
当列表的长度小于 512,并且所有元素的长度都小于 64 字节时,使用压缩列表存储;否则使用 linkedlist 存储。

0.3. 字典的底层实现原理

哈希对象的编码有两种,分别是:ziplist、hashtable。
当哈希对象保存的键值对数量小于 512,并且所有键值对的长度都小于 64 字节时,使用压缩列表存储;否则使用 hashtable 存储。

0.4. 集合的底层实现

集合对象的编码有两种,分别是:intset、hashtable。
当集合的长度小于某个特定值,并且所有元素都是整数时,使用整数集合存储;否则使用 hashtable 存储。

0.5. 有序集合的底层实现

有序集合对象的编码有两种,分别是:ziplist、skiplist。
当有序集合的长度小于某个特定值,并且所有元素的长度都小于 64 字节时,使用压缩列表存储;否则使用 skiplist 存储。


http://lihuaxi.xjx100.cn/news/1494469.html

相关文章

LeetCode(力扣)530. 二叉搜索树的最小绝对差Python

LeetCode530. 二叉搜索树的最小绝对差 题目链接代码 题目链接 https://leetcode.cn/problems/minimum-absolute-difference-in-bst/ 代码 递归 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # …

Java doc等文件生成PDF、多个PDF合并

之前写过一遍文章是 图片生成PDF。 今天继续来对 doc等文件进行pdf合并以及多个pdf合并为一个pdf。 兄弟们&#xff0c;还是开箱即用。 1、doc生成pdf 依赖 <!-- doc生成pdf --><dependency><groupId>com.aspose</groupId><artifactId>aspose…

ApiPost软件会对数据进行预处理,有可能会导致数据报错

文章目录 测试数据正确的请求方式当URL有数据被修改之后&#xff08;数据就不一致了&#xff09; 测试数据 %257B%2522pageNum%2522:1,%2522pageSize%2522:10,%2522param%2522:%257B%2522flowType%2522:1,%2522workcardType%2522:%2522作者的请求方便大家一键复制 localhost:…

dp答案和状态互换 || 多询问类dp转倍增/二分优化:CF1175E

https://www.luogu.com.cn/problem/CF1175E Trick 1 按照正常套路 d p i dp_i dpi​ 为到达 i i i &#xff08;限制&#xff09;最少多少条&#xff08;答案&#xff09;&#xff0c;其实可以转化为 d p i dp_i dpi​ 用 i i i 条&#xff08;限制&#xff09;最远可以到…

安装grpc

安装过程依照 官网指南&#xff0c;以下内容为进一步解释 1.将 MY_INSTALL_DIR 环境变量设置为当前用户的主目录下的 .local 子目录路径。export 命令用于将环境变量添加到当前会话的环境中&#xff0c;使其对于后续执行的命令和子进程都可用。 export MY_INSTALL_DIR$HOME/.l…

涉及结构体的排序问题

简单举一个例子来介绍涉及结构体的排序问题。 例&#xff1a;输入若干学生姓名、语文成绩、数学成绩、英语成绩&#xff0c;根据三科成绩总分由高到低进行排序。 输入数据&#xff1a; 小明 78 89 90 小红 87 88 77 小华 91 92 96 输出样例&#xff1a; 小华 91 92 96 279 小明…

C# List与HashSet的contains()方法查询速度比较

List 和HashSet同时查询40万条数据&#xff0c;谁的效率更高&#xff1f; //**1.下面是List底层源码**public boolean contains(Object o) {//如果查到我们想要查询的值则返回一个true&#xff0c;否则返回false&#xff0c;return indexOf(o) > 0;//这里是调用了indexOf方…

为何我要写Qt入门教程

C的就业市场 C的就业市场有如下的典型特征&#xff0c;尤其是一些有价值的岗位。 行业众多难以培训 C的就业市场很难通过标准化的培训来实现&#xff0c;往往隔行如隔山。 不同的行业&#xff0c;虽然都用C&#xff0c;但是他们的业务确是完全不相关。 使用的技术点&#…