【无标题】

一、动态字符串

Redis 中都是字符串进行存储,没有采用C语言的字符串进行存储,构建了一种新的字符串结构,SDS simple Dynamic String。
在这里插入图片描述
C语言结构体定义SDS,有很多种不同长度的SDS,避免内存浪费。

在这里插入图片描述
SDS结构:

在这里插入图片描述

是可以动态变化长度的

小于1M 分配两倍 + 1
大于1M分配 字符串长度 + 1 M + 1 , 内存预分配。

二进制安全是指 遍历到\0时不会停下来

在这里插入图片描述

二、IntSet

在这里插入图片描述

升序排列
在这里插入图片描述自动升级,倒序拷贝到正确的位置。

在自动升级的时候,插入的数字要么是最大的,要么是最小的,一定是在两边进行操作。

在这里插入图片描述

三、Dict

键和值是通过Dict进行实现的,

三部分构成,哈希表,哈希节点,字典
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
DIct扩容

当哈希冲突多了之后,就会退化成链表,查询性能下降。

在这里插入图片描述

ZipList

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
没有通过指针来记录前后的节点,只是通过计算偏移量来计算就可以。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

0 - 12直接存储

在这里插入图片描述能够减少指针的内存空间

连锁更新问题,插入的节点大于254字节,这个时候所有的存储单元都要往后移动,进行改变。

在这里插入图片描述在这里插入图片描述在这里插入图片描述

QuickList

ziplist 比较占用内存,尤其是要申请一片连续的内存空间的时候,是困难的,分片存储ziplist,限制每个ziplist的大小。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
上图中首尾不压缩,其他节点进行压缩。
在这里插入图片描述

SkipList

跳表,多个指针,不再指向以前紧跟着的节点了,跨度比较大。最大能有32个指针,2^31
在这里插入图片描述ele是数据
在这里插入图片描述在这里插入图片描述

RedisObject

在这里插入图片描述
每一个Object都是一个数据,如果都是string类型的话,占用空间是最大的,因为一个string需要存储其他的编码方式,lru等等。

在这里插入图片描述
在这里插入图片描述
HT 哈希表

String

在这里插入图片描述
在这里插入图片描述
RAW先申请头的内存,再申请存储空间的内存。

在这里插入图片描述
三种类型

在这里插入图片描述
在这里插入图片描述

List

在这里插入图片描述

set

在这里插入图片描述
每次添加新的元素的时候,都会去检查是否是数字类型,如果不是的话,那么就要转化成HT编码
在这里插入图片描述在这里插入图片描述

zset

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Hash

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

内核空间 用户空间

在这里插入图片描述都是要经过缓冲区进行缓冲
在这里插入图片描述

阻塞IO

在这里插入图片描述

非阻塞IO

没什么用
在这里插入图片描述

IO多路复用

在这里插入图片描述
在这里插入图片描述

select

select性能相对较差

在这里插入图片描述

poll

在这里插入图片描述

epoll

在这里插入图片描述
在这里插入图片描述

FT ET

在这里插入图片描述LT 存在性能上的问题 在这里插入图片描述

RESP协议

在这里插入图片描述
单行字符串 结尾标识,二进制不安全,返回结果OK
在这里插入图片描述

Redis内存策略

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

淘汰策略

在这里插入图片描述
在执行命令之前尝试做内存是否异常

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值