• Redis系列之——深入了解Redis的String,源码层级+极易理解图片解析!


    前言

    在上一篇文章中,我和大家介绍了Redis的前世今生,Redis的诞生就是为了解决mysql中IO性能的瓶颈,这一篇就和大家一起揭秘Redis神秘的面纱,第一个我们就来聊一聊Redis数据类型中的String!

    Redis的数据结构

    Redis最常用的数据类型有五种

    • String: 字符串
    • Hash: 散列
    • List: 列表
    • Set: 集合
    • Sorted Set: 有序集合

    五种其实是Redis键值对中值存储的数据类型,而他们的底层数据结构一共有6种:分别是

    • 简单动态字符串
    • 双向链表
    • 压缩列表
    • 哈希表
    • 跳表
    • 整数数组

    数据类型和数据结构的对应关系如下图:

    这张图会在未来几篇文章中反复出现,帮大家彻底了解Redis的基础类型。

    今天我们就来聊一聊其中的string

    Redis是用C写的,那为什么不用C语言的String?

    众所周知,Redis是用C语言写的,那Redis为什么没有使用C原生的字符串,而是自己创建了一个简单动态字符串?(SDS simple dynamic string)

    • C语言的字符串底层是用字符数组来实现的,在一片连续的空间中依次存放字符,为了判断字符的结束,他会在最后以'\0'作为识别,这样就会带来以下问题

      1. 无法存放任意的字符,至少'\0'是不可以的,这就会导致一些如图片,音频等出现了'\0'就会出现问题。
      2. 对字符串进行追加等操作的时候,必须遍历到'\0'才可以操作,会导致效率比较低,复杂度为o(n)
    • C语言的字符串是不记录字符串长度的,一旦我们调用了拼接函数等,而没有提前计算好内存,就会产生缓冲区溢出的情况,所以为了不出问题,会进行内存重分配,而这又多出了内存重分配的性能损耗

    那么,Redis是怎么处理这些问题的呢?

    简单动态字符串(Redis5.0版本)

    Redis中的字符串数据是通过简单动态字符串(以下简称SDS)来存储数据的。

    SDS到底是什么?

    我们先来看看SDS的结构长什么样

  • 相关阅读:
    MySQL高级篇知识点——其它数据库日志
    mediaPlayer MediaPlayer 读取 字节数组
    Linux软件管理
    【Python基础知识】(17)序列类型的相互转换
    Vue2基础用法及案例
    IOT设备情况数据分析
    Kaggle 专利匹配比赛赛后总结
    VS code 下 makefile 【缺少分隔符 停下来】 报错解决方法
    python小知识--创建scrapy工程步骤
    Windows 安装的虚拟环境位置在哪里,怎么找到pycharm对应的python解释器
  • 原文地址:https://blog.csdn.net/m0_67698950/article/details/126919971