当前位置: 首页 > news >正文

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

前言:在这篇博文中,我们将简单总结在面试中怎么回答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 存储。

相关文章:

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

前言:在这篇博文中,我们将简单总结在面试中怎么回答Redis数据类型的底层实现。 因为面试时间就那么点,言简意赅的描述自己会的知识显得尤为重要‼️ 文章目录 0.1. String 的底层实现原理0.2. 列表的底层实现原理0.3. 字典的底层实现原理0.4.…...

Win11共享文件,能发现主机但无法访问,提示找不到网络路径

加密长度选择如下: 参考以下链接: Redirectinghttps://answers.microsoft.com/zh-hans/windows/forum/all/win11%E8%AE%BE%E7%BD%AE%E6%96%87%E4%BB%B6%E5%A4%B9/554343a9-d963-449a-aa59-ce1e6f7c8982?tabAllReplies#tabs...

ROS中使用Navigation报错信息

在ROS中使用遇到了几个Navigation报错信息,在这里进行下记录: [ WARN] [1688134727.429227824]: The origin for the sensor at (7.35, 13.12) is out of map bounds. So, the costmap cannot raytrace for it. 解决办法: [ WARN] [16881…...

three.js(六):自适应设备分辨率

自适应设备分辨率 当今大多数的PC端和移动端显示器都是HD-DPI显示器。HD-DPI 是High Definition-Dots Per Inch 的简称,意思是高分辨率显示器。不同设备的显示器的分辨率是不一样的。 以上图中的iPhone6/7/8 为例:375*667 代表的手机的屏幕的物理尺寸&a…...

Kubernetes对象深入学习之五:TypeMeta无效之谜

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《Kubernetes对象深入学习之五》系列的第五篇,从前文的分析也能看出,代表对象类型的schema.ObjectKind,于…...

Gitlab设置中文

1. 打开设置 2.选择首选项Preferences 3. 下滑选择本地化选项Localization,设置简体中文,然后保存更改save changes。刷新网页即可。...

【微服务部署】05-安全:强制HTTPS

文章目录 安全 : 强制HTTPS的两种方式1. Ingress配置重定向2. 应用程序配置3. Ingress配置4. 应用程序配置代码总结 安全 : 强制HTTPS的两种方式 互联网发展中,安全是非常重要的,由其是现在HTTPS非常普及的情况下,应用程序在公网上一般都会被…...

Config:服务端连接Git配置

创建子模块 Pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org…...

c++学习 之 类和对象 public , protected ,private

前言 在C中&#xff0c;访问控制修饰符&#xff08;Access Control Modifiers&#xff09;用于控制类的成员&#xff08;成员变量和成员函数&#xff09;的访问权限。这些修饰符分为三种&#xff1a;public、protected和private。它们定义了成员可以在何处访问&#xff0c;具体…...

ECharts图表动态修改series显示隐藏

文章目录 1、前言2、思路3、实现 1、前言 最近做的大数据平台&#xff0c;里面很多部分用到了ECharts&#xff0c;其中有个功能&#xff0c;要求将图表分组&#xff0c;根据用户选择的组&#xff0c;来确定ECharts要显示那些线条和柱子&#xff0c;也就是动态的显示option.seri…...

云服务器(Centos7系统)配置JAVA+mysql+tomcat 环境

文章主要内容来源云服务器&#xff08;Centos7系统&#xff09;部署javaweb项目&#xff08;二&#xff09;配置JAVAmysqltomcat 环境_man_zuo的博客-CSDN博客 模仿途中遇到的问题 连接无效 有时连接无法下载&#xff0c;可能是过期了&#xff0c;将其更换为官网给的下载连接即…...

【计算机视觉 | 目标检测】目标检测常用数据集及其介绍(四)

文章目录 一、JTA (Joint Track Auto)二、AVD (Active Vision Dataset)三、ExDark (Exclusively Dark Image Dataset)四、InteriorNet五、ScanRefer Dataset六、FlickrLogos-32七、SIXray八、Clear Weather (DENSE)九、DVQA (Data Visualizations via Question Answering)十、M…...

Dockerfile制作镜像与搭建LAMP环境

一.编写Dockerfile制作Web应用系统nginx镜像&#xff0c;生成镜像nginx:v1.1&#xff0c;并推送其到私有仓库。具体要求如下&#xff1a; &#xff08;1&#xff09;基于centos基础镜像&#xff1b; &#xff08;2&#xff09;指定作者信息&#xff1b; &#xff08;3&#xff…...

Linux系统中查看端口的方法

一、使用netstat命令 netstat命令是一种非常实用的命令&#xff0c;可以用来显示网络连接、路由表、网络接口和网络统计信息等。它还可以用来显示系统中正在监听的端口。要查看端口&#xff0c;只需在终端中输入以下命令&#xff1a; netstat -tuln 这个命令的意思是列出所有…...

java mysql传入string数组返回string数组的简单写法

一、前言 最近有个需求&#xff0c;需要一个传入string数组返回string数组的sql逻辑。 懒得封装成javabean了&#xff0c;于是就写了一个简单的样例&#xff0c;总结下。 二、代码 1.mapper.java&#xff0c;可以这样写&#xff1a; public interface MyMapper {String[] …...

【PHP】PHP基本语法

1、PHP标记 当解析一个文件时&#xff0c;PHP 会寻找起始和结束标记&#xff0c;也就是 <?php 和 ?>&#xff0c;告诉 PHP 开始和停止解析二者之间的代码。此种解析方式使得 PHP 可以被嵌入到各种不同的文档中去&#xff0c;而任何起始和结束标记之外的部分都会被 PHP…...

SystemVerilog interface详细介绍

1. Interface概念 System Verilog中引入了接口定义&#xff0c;接口与module 等价的定义&#xff0c;是要在其他的接口、module中直接定义&#xff0c;不能写在块语句中&#xff0c;跟class是不同的。接口是将一组线捆绑起来&#xff0c;可以将接口传递给module。 2. 接口的优…...

计网第四章(网络层)(三)

IPV4地址的应用规划&#xff1a; 定长的子网掩码FLSM&#xff1a; 使用同一个子网掩码划分子网&#xff0c;每个子网所分配的IP地址数量相同&#xff0c;造成IP地址的浪费。 变长的子网掩码VLSM&#xff1a; 使用不同的子网掩码划分子网&#xff0c;每个子网所分配的IP地址…...

python学习1之安装

前言 目前&#xff0c;Python有两个版本&#xff0c;一个是2.x版&#xff0c;一个是3.x版&#xff0c;这两个版本是不兼容的。由于3.x版越来越普及&#xff0c;我们的教程将以最新的Python 3.9版本为基础。 1、下载 官网地址 https://www.python.org/downloads/ 2、安装 点击…...

Autofac在WebApi,Winform中应用

安装注意事项 使用AOP的时候需要安装Autofac.Extras.DynamicProxy,如果发现VS老是提示报错,需要把VS重启下才可以识别。 WebApi 注意事项:WebApi中多一个ApiController中构造注入功能。 注入和AOP拦截 var siteNameList ClassHelper.GetConstants(typeof(SiteName));//创建…...

遗传算法混合动力汽车控制策略【附代码】

✨ 长期致力于混合动力汽车、能量管理策略、模糊控制、遗传算法研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;多目标分层编码与种群初始化策略&…...

期刊屡投不中?虎贲等考 AI:真文献 + 实证图表 + 期刊规范,高效冲击录用

职称评审、课题结题、科研评优、学业深造……一篇高质量期刊论文是所有学术人绕不开的硬指标。但框架难搭、文献难找、实证难做、格式难调、审稿太严&#xff0c;让无数人陷入 “写得慢、返修多、录用难” 的困境。通用 AI 爱编文献、普通工具无实证、办公软件不学术&#xff0…...

MATLAB新手也能懂:用Jakes模型仿真120km/h车速下的无线信道衰落(附完整代码)

MATLAB实战&#xff1a;从零构建120km/h车速下的Jakes信道仿真模型 第一次接触无线信道仿真时&#xff0c;我被那些复杂的公式和抽象的概念弄得晕头转向。直到亲手在MATLAB中实现了Jakes模型&#xff0c;看着屏幕上跳动的多普勒谱曲线&#xff0c;才真正理解了移动通信中多普勒…...

2026校招技术岗薪资大盘点:AI方向白菜价40w起,这个方向却跌破20w

上周帮学弟看offer&#xff0c;吓了一跳。某大厂给AI对齐岗的校招白菜价&#xff0c;总包42w。同一个公司&#xff0c;传统测试开发岗&#xff0c;开出了18w。差了不止一倍。这不是个例。我翻了牛客网五月最新的offer帖&#xff0c;又问了几个在阿里、字节、美团的朋友&#xf…...

从OOK到2ASK:二进制数字载波调制的入门实践与误码率分析

1. 从灯泡开关到数字通信&#xff1a;OOK调制初探 想象一下你站在房间门口&#xff0c;用开关控制灯泡向远处的朋友传递信息——亮表示"1"&#xff0c;灭表示"0"。这就是OOK&#xff08;通断键控&#xff09;最直观的生活原型。作为二进制振幅键控(2ASK)家…...

React组件化思维,构建可复用、可维护的前端应用

组件化是React框架的核心思想&#xff0c;也是现代前端开发的主流模式。React认为&#xff0c;任何复杂的页面都可以拆分为多个独立的、可复用的组件&#xff0c;每个组件负责一个特定的功能模块&#xff0c;通过组件的组合与嵌套&#xff0c;构建出完整的前端应用。这种组件化…...

RK3568开发板AMP双系统烧写实战:从原理到调试全解析

1. 项目概述&#xff1a;从单核到异构&#xff0c;解锁开发板的并行处理潜能最近在折腾一块瑞芯微RK3568的开发板&#xff0c;具体型号是迅为的iTOP-3568。这块板子性能不错&#xff0c;四核A55的架构&#xff0c;在嵌入式领域算是中坚力量了。但玩着玩着&#xff0c;我发现了一…...

用DevC++和OpenCV 2.4.10写个图像处理小工具:从环境搭建到第一个窗口程序

用DevC和OpenCV 2.4.10打造图像处理工具&#xff1a;从零到实战 在编程学习的道路上&#xff0c;没有什么比"动手做出一个实际可用的工具"更能激发学习动力了。本文将带你用DevC和OpenCV 2.4.10&#xff0c;从环境搭建开始&#xff0c;一步步创建一个能实际处理图像的…...

中文大语言模型智能路由:统一接口调度多模型,实现降本增效

1. 项目概述&#xff1a;一个中文大语言模型路由器的诞生最近在折腾大语言模型应用开发的朋友&#xff0c;估计都遇到过这个头疼的问题&#xff1a;手头有好几个模型&#xff0c;比如智谱的GLM、百度的文心、阿里的通义&#xff0c;还有一堆开源的&#xff0c;每个模型都有自己…...

在Photoshop中解锁AVIF格式:开源插件深度应用指南

在Photoshop中解锁AVIF格式&#xff1a;开源插件深度应用指南 【免费下载链接】avif-format An AV1 Image (AVIF) file format plug-in for Adobe Photoshop 项目地址: https://gitcode.com/gh_mirrors/avi/avif-format 作为网页设计师、摄影师或数字内容创作者&#xf…...