图解redis五种数据结构底层实现(动图版)

本文深入探讨Redis中的五种基本数据结构——字符串、哈希、集合、有序集合和列表的底层实现,包括动态字符串SDS、int、双向链表、ziplist和哈希表等。详细解析了它们的内部机制,如空间预分配、压缩列表的连锁更新、哈希表的扩容和收缩等,旨在帮助读者理解Redis如何高效存储和操作数据。
摘要由CSDN通过智能技术生成

redis有五种基本数据结构:字符串、hash、set、zset、list。但是你知道构成这五种结构的底层数据结构是怎样的吗?今天我们来花费五分钟的时间了解一下。(目前redis版本为3.0.6)

动态字符串SDS

SDS是"simple dynamic string"的缩写。redis中所有场景中出现的字符串,基本都是由SDS来实现的

  • 所有非数字的key。例如 setmsg"hello world" 中的key msg.
  • 字符串数据类型的值。例如`` set msg "hello world"中的msg的值"hello wolrd"
  • 非字符串数据类型中的“字符串值”。例如 RPUSH fruits"apple""banana""cherry"中的"apple" "banana" "cherry"

SDS长这样

图解redis五种数据结构底层实现(动图版)

 

free:还剩多少空间 len:字符串长度 buf:存放的字符数组

空间预分配

为减少修改字符串带来的内存重分配次数,sds采用了“一次管够”的策略:

  • 若修改之后sds长度小于1MB,则多分配现有len长度的空间
  • 若修改之后sds长度大于等于1MB,则扩充除了满足修改之后的长度外,额外多1MB空间

图解redis五种数据结构底层实现(动图版)

 

惰性空间释放

为避免缩短字符串时候的内存重分配操作,sds在数据减少时,并不立刻释放空间。

图解redis五种数据结构底层实现(动图版)

 

int

就是redis中存放的各种数字 包括以下这种,故意加引号“”的

图解redis五种数据结构底层实现(动图版)

 

双向链表

长这样:

图解redis五种数据结构底层实现(动图版)

 

分两部分,一部分是“统筹部分”:橘黄色,一部分是“具体实施方“:蓝色。

主体”统筹部分“:

  • head指向具体双向链表的头
  • tail指向具体双向链表的尾
  • len双向链表的长度

具体"实施方":一目了然的双向链表结构,有前驱 pre有后继 next

由 list和 listNode两个数据结构构成。

ziplist

压缩列表。redis的列表键和哈希键的底层实现之一。此数据结构是为了节约内存而开发的。和各种语言的数组类似,它是由连续的内存块组成的,这

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值