redis知识图谱总结

个人博客:👉进入博客,关注下博主,感谢~

🌈所有博客均在上面博客首发,其他平台同步更新
🏆大家一起进步,多多指教~
在这里插入图片描述

前言

面试

在面很多高级岗位的时候,面试官会时不时来句redis底层数据结构,以及各种扩展,例如:

再如我面过很多大厂也会问我rehash,我当时???好吧,尽量完善自己的知识图谱

redis数据结构

本博客主要是观看《redis设计与实现》,然后进行个人的学习总结~

sds

simple dynamic string
它是字符串实现数据结构,特点:会保存使用字节的数量,以及未使用的字节的数量
好处:不会内存溢出,比如说缓冲区,既然我已经有了这个数值,你如果比我空闲的数量大,我需求进行扩容。数据个数,也不需要进行遍历,直接从属性里头拿就完事了。
在这里插入图片描述
扩展的过程
在这里插入图片描述

  1. 小于1M的时候会翻倍
  2. 大于1M的时候会扩展1M

好处是可以节约内存空间

字典

dic
在这里插入图片描述
如果遇到hash冲突也会变成链表,解决冲突

rehash

在这里插入图片描述

主要发生在扩容跟缩容情况下,它需要对之前的字典进行相应的扩展跟缩减,导致当前服务不可用,如果说字典很大的时候,会在复制的时候导致卡顿,所以有了rehash优化。
具体就是在复制阶段,会有ht[0],ht[1],有两张hash表,它会重新计算值在新表的位置,然后记录迁移的剩余数量。
查询的时候,会先去旧表,没有再去新表查询。插入直接往新表插,删除两张表都删除,这样做到同步。

跳表

skiplist
多层索引的列表,每个值1-32层,层数越高搜索越快。
然后它每个节点会记录,头尾节点,这样的话方便进行前进跟后退的遍历。
在这里插入图片描述

搜索过程:比如说从header开始,往最高层走,大于这个数,继续前进,小于的话就后退

跳表跟红黑树比较

实现会更简单,插入等等不需要说树的左右节点进行平衡

插入相同值

在这里插入图片描述
如果插入相同的值,它会根据节点对象进行排序

压缩列表

它会根据前一个节点的占用内存大小,来保存这个长度

连锁更新

在这里插入图片描述
在表头,中间插入新的节点,如果刚好需要在5个节点的长度的时候,后面那个节点也得扩容,一直传递下去。

redis持久化

RDB

全量保存redis命令,

命令
SAVE会阻塞服务,然后进行生成rdb文件
BGSAVE会fork子线程进行复制内存,生成rdb文件

big-key的问题

redis是单线程,会造成阻塞。其次是大key的话,在fork子线程复制的时候也会造成线程阻塞。

在这里插入图片描述

AOF

增量模式保存,也就是会缓存一些写的命令,然后到aof文件

复制

命令
sync会要求主服务进行传输rdb文件,还有写命令缓存区进行同步,如果断联之后会重新生成rdb文件
psync如果非首次同步,断联之后只是将丢失的写命令回传

redis 为啥很快

  1. 单线程,避免上下文切换
  2. 多路复用,linux epoll,在内核态跟用户态之间有一层映射mmap,然后有一个链表,如果有返回值往里面塞入

redis 高可用

  1. sentinel 客观、主观下线,raft选举,同步
  2. 集群,1W槽,根据hash算法去划分数据区域,方便扩展
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值