1、SAVE和BGSAVE的区别
SAVE 直接调用 rdbSave ,阻塞 Redis 主进程,直到保存完成为止。在主进程阻塞期间,服务器不能处理客户端的任何请求。
BGSAVE 则 fork 出一个子进程,子进程负责调用 rdbSave ,并在保存完成之后向主进程发送信号,通知保存已完成。 Redis 服务器在BGSAVE 执行期间仍然可以继续处理客户端的请求。
2、redis主从复制原理
当建立一个从服务器后,从服务器会想主服务器发送一个SYNC的命令,主服务器接收到SYNC命令之后会执行BGSAVE
然后保存到RDB文件,然后发送到从服务器!收到RDB文件然后就载入到内存!
3、RDB缓存原理
redis通过fork()产生一个子进程,
子进程将数据写入临时的RDB文件中(目录在dir),
当子进程完成对新RDB文件的写入时,用临时RDB文件替换原来的RDB文件,并删除旧的RDB文件。
这样在任何时候出现故障,Redis的RDB文件都总是可用的。
注意:每次写操作都是将整体的数据写入到磁盘一份,这样数据量大的话,回引起大量的磁盘io操作,会影响性能
4、AOF写入
AOF文件是一个只进行追加的日志文件,这样数据会越来越大,针对这种情况redis推出了bgrewriteaof机制
5、bgrewriteaof机制
bgrewriteaof机制不是对整个文件进行压缩,而是对当前数据执行遍历操作,将当前所有数据都生成一条写入日志
6、AOF重写原理
redis通过fork()产生一个子进程,
子进程将新的AOF文件写入到临时文件中,
父子进程是并行执行的,父进程在接受到新的写入命令,将写命令追加到现有的AOF文件中,同时将写命令追加到AOF重写缓存中
子进程完成重写工作后,通知父进程,父进程接收到完成信号后,将AOF重写缓存中的内容追加到新AOF文件的末尾。
原子性的用新AOF替换旧AOF
7、AOF重写问题
当AOF重写和AOF写入同时进行的时候,会涉及到大量的磁盘io操作,这样会造成父进程在进行AOF写入的时候会出现阻塞,这是采用no-appendfsync-on-rewrite配置
参数设置为no,是安全的方式,需要忍受阻塞
设置为yes,如果这个时候redis出现故障,会造成数据的丢失,在linux系统默认设置下,最多会丢失30s的数据
8、cluster只有一个数据库 DB0
redis技术点
猜你喜欢
转载自blog.csdn.net/jing956899449/article/details/56842875
今日推荐
周排行