Redis复制
自己不断的在学习,希望能把学到的东西分享出来,自己也能巩固记忆,如果那里写错了希望能及时指出,不要让我一直抱着错误的知识,谢谢。
redis的复制配置十分简单,只需要在从库上面加上
slaveof ip 端口号
命令即可,支持多从配置。
redis的复制默认是异步操作,保证了低延迟和高可用性。redis 的复制是AP属性,因为redis复制的时候主从都不会进行阻塞。官网强烈建议在进行复制配置的时候开启主从的持久化,举个例子:
A为主,B为从,B从A复制数据
当A挂掉的时候,由于没有进行持久化,数据会被清空
这时候B进行复制的时候发现A没有数据,则用空数据覆盖掉了原始数据
复制原理
redis通过保存RDB文件传递给从库来同步数据,在redis4.0之前,从库接收到RDB文件时会写入磁盘,在读入内存进行同步操作,但是在redis4.0之后,支持直接解析RDB文件,无需写入磁盘。
redis会记录一个replication id,offset 键值对,记录了当前的主的数据集状态,在实际操作中,replication id 会存在2个ID(主ID,辅助ID),ID是一个随机生成的字符串,辅助ID主要是应用于从库,当主库挂掉时,被当选的从库会将辅助ID切换为主ID,然后进行其他从库的复制,完成复制后,会生成一个新的ID覆盖掉主ID,因为这个代表了新的一轮开始。
offset的作用时为了减少辅助的数据,通过offset可以判断出从库缺少的数据,只需要讲这些数据进行复制即可,无需全量复制。
从Redis 2.6开始,从站支持默认启用的只读模式。当然这个时可以支持配置的,由slave-read-onlyredis.conf文件中的选项控制,可以在运行时使用CONFIG SET启用和禁用。