3/11学习上

1、为什么redis这么快

1.redis位于内存之中;与硬盘与时钟周期相差几千或者是几万倍的速度相比,内存的速度更快。

2.redis使用了单线程的操作;次性只执行一个命令,避免了线程切换和锁竞争带来的消耗。

3.redis采用多路复用的方式;使用了linux中的select和epoll的概念 ,同意内核中有多个监听套接字和已连接套接字,内核会一直监听这些套接字上的连接请求和消息请求,一旦有请求达到,就会交给redis执行,一个线程处理多个io读写操作。

3.高效的数据结构;redis提高了很多数据结构,他们都有被自定义,得到了优化

2、说一下IO复用

使用了linux中的select和epoll的概念 ,同意内核中有多个监听套接字和已连接套接字,内核会一直监听这些套接字上的连接请求和消息请求,一旦有请求达到,就会交给redis执行,一个线程处理多个io读写操作。

在整个操作中只有select、poll、epoll调用的时候会进行阻塞,收发客户端的消息则不会。

3、redis为什么早期选择单线程

因为redis位于内存中,其cpu不太可能会成为redis的瓶颈,redis很受限于内存的大小和网络的速度。

4.Redis6使用了多线程是怎么回事

他的多线程主要用于读写数据和解析协议,在执行命令上还是单线程。

原因是因为,redis的瓶颈主要是网络速度上,我多线程解析协议,加快速度。

5redis持久化分为哪些方式,有什么区别

1.RDB:是二进制压缩包文件,用于保存当前进程的数据生成快照存储在硬盘之中,触发RDB分为自动触发和手动触发。

RBD可以用来还原某一个时刻的操作,由于存在于硬盘之中,即使redis突然崩溃,仍然可以通过rdb恢复某一个时刻的状态,

rdb分为save和bdsave;

save:阻塞当前redis服务,知道rdb完成位置,对内存比较大的实例会造成较长的邮箱,在线上环境上不推荐使用

bgsave:redis进程执行fork操作创建子进程,在子进程种执行,完成后自动结束,阻塞只发成fork阶段,速度很快

触发场景:

(1)执行save操作如 save n m ,自动触发bgsave

(2) 从节点执行全量复制操作,主节点会自动执行bgsave,然后发送给从节点

(3) 执行debug load,主节点会自动执行save

(4) 执行shutdown命令时,没有开启aof操作则会执行bgsave

2.AOF:独立日志存储命令,重新启动的时候执行aof文件,aof的优点是实时性操作,是主流操作

AOF的执行流程是:命令写入、文件同步,文件重写,重启加载

流程是这样子的:

所有的命令都写入缓存区种

缓存区跟着对应的策略向硬盘进行同步操作

随着AOf增大,定期重写,减少大小。

重启redis的时候,可以使用aof进行数据恢复。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值