楚风网站建设工作室,免费注册公司网址,酒业公司网站模板,有服务器自己怎么做网站前言#xff1a;在这篇博文中#xff0c;我们将简单总结在面试中怎么回答Redis数据类型的底层实现。 因为面试时间就那么点#xff0c;言简意赅的描述自己会的知识显得尤为重要‼️ 文章目录 0.1. String 的底层实现原理0.2. 列表的底层实现原理0.3. 字典的底层实现原理0.4.… 前言在这篇博文中我们将简单总结在面试中怎么回答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 存储。