redis面试

2021-03-22  本文已影响0人  Luxifer路西菲尔

redis内部的数据结构:

1.简单动态字符串(sds):内部是二进制,存在一个len字段记录长度值

2.双端链表:可以回溯到前边的链表

3.跳跃表:更快的访问后续节点

4:字典:内部是hash存储,隔一段时间会实现rehash,将4,4重新hash到8长度的内存

5.压缩列表:每个节点记录前一个节点长度,可以回溯到前边的字符,存在问题是会连锁更新,长度254变更后会连锁变化

redis的对象:

有序集合:

使用压缩链表与跳跃表实现

压缩链表中根据分值排序,v与score先后进入

跳跃表也是按照分值进行排序

哈希结构:

使用压缩链表与hashtable结构实现

压缩链表中k,v先后插入

hashtable使用字典作为底层结构,字典的k,v就是一一对应

集合:

使用整数链表和hashtable进行实现

当元素是整数时候使用整数列表

hashtable使用字典底层实现,k是集合元素,v都是null

列表:

使用压缩列表和双端链表实现

压缩列表实现每个列表节点存一个元素

双端链表每个节点存一个元素

一些基础点:

1.redis是内存操作,因此可以快速访问

2.redis是单线程,避免了线程切换造成的cpu损耗

3.redis使用epoll实现io单路复用技术

redis的数据淘汰机制:

redis使用定期删除与惰性删除。

数据淘汰机制分类:

1、定时删除,设置定时时间,到达时间后删除

2、定期删除,服务每到达一个时间节点全部遍历,将过期key淘汰

3、惰性删除,每次对key的访问操作来临时候检查是否过期,过期则删除

redis的事务:

redis的事务,前一条执行失败,事务中后续命令会继续执行

redis不存在事务回滚的机制,追求简单化

原子性:如果语句出问题整个事务全部放弃执行,因此会保证完整性。

一致性:事务虽然有的语句执行失败继续执行,但是所有事务都会执行失败,因此具有一致性。入队错误:直接不执行,具有一致性。执行错误:全部执行错误,具有一致性

隔离性:单线程,因此具有隔离性

持久性:不具有很强的持久性,因为rdb与aof文件所具有的持久性

redis复制:

RDB与AOF

rdb存储的是数据

aof存储的是逻辑文件

rdb基本复制:

1.从服务器发送复制请求

2.主接口生成rdb文件,并且用缓冲区记录目前的命令

3.将rdb文件发送从服务器,然后发送缓冲区记录的命令

4.从服务器加载rdb文件,并且执行主接口发送的缓冲区命令

存在问题:

1.初次复制:没有问题

2.断线后重连,存在问题,会造成时间上的浪费

rdb优化复制:

1.从服务器会发送给主服务器一个偏移量

2.主服务器通过偏移量给从服务器发送偏移量到现在的数据

3.从服务器加载存在的数据

如果偏移量态久远则执行初次复制。

复制积压缓存区是一个先进先出的队列。

redis cluster

去中心化,因此需要主从复制的思路

通过哈希一致性将每种分配到一个固定的槽中

上一篇 下一篇

猜你喜欢

热点阅读