简述Redis的持久化、主从结构、流水线

源于《Redis实战》

持久化

有两种持久化方式,可以配合使用。

RDB

简介:快照,某一时刻所有数据写入硬盘。
使用:把快照复制到其他服务器备份、重启服务器的时候使用。

创建方法:

  1. BGSAVE命令(Windows不支持):Redis会fork个子进程,然后子进程把快照写入硬盘,父进程继续处理新命令。一般留30%-45%的内存用于执行命令,创建记录写命令的缓冲区。
  2. SAVE命令:创建完成快照之前不会接受新的命令,优点是节省内存。
  3. 配置文件 sava A B A秒内有B个写入的时候,进行bgsave。
  4. Redis收到SHOUTDOWN或者TERM信号的时候。

性能:

  • 几个GB的时候可以使用这种持久化方式。
  • 进程每占用1G,创建子进程就要增加10-20毫秒,虚拟机需要增加的时间更多200-300毫秒。比如Redis进程占用20G内存,在标准硬件创建子进程将导致停顿200-400毫秒,Xen虚拟机停顿4-6秒。 当然创建完子进程写入硬盘需要花费更多的时间。

AOF

执行写命令时,把命令复制到硬盘。

同步频率:

  • always 每条命令(可能会降低固态硬盘寿命)
  • everysec 每秒一次(推荐使用,Redis性能几乎不受影响)
  • no 不自动同步

问题:
占用空间很大,可以用BGREWRITE命令重写(这个命令也是通过子进程进行的),需要注意的是,重写后删除好几G旧文件的时候会造成。

主从结构

复制

为了提高负载,和系统的可靠性。命令:slaveof no one,slaveof host port,只可以主从复制,不支持主主复制。

过程:
在这里插入图片描述
如果有新的从服务器连接主服务器,如果步骤3尚未执行,所有从服务器收到相同的快照和缓存区写命令。
否则,重新执行1-5步骤。

主从链

如果读明显多于写,而读请求数量远超一台Redis服务器可以解决的问题。随着负载上升,主节点可能无法快速更新所有服务器,用户可用过中间层来分担复制工作,如下图
在这里插入图片描述

一致性\性能

事务

格式

MULTI
中间业务代码
EXEC

在MULTI和EXEC之间的命令在执行的时候不会被其他客户端打扰,底层通过流水线提高性能。

流水线

一次性发送多个命令,减少通信次数,从而降低延迟。

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

性能瓶颈

可以用redis-benchmark工具测试服务器的Redis性能。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44532671/article/details/122932776