Redis主从同步 和 持久化 Pipeline 原理

redis主从复制:
1. 同一个master可以有多个slaves
2. slave可以接受其它slaves的连接和同步请求, 这样会有效地分载master的同步压力.
3. master以非阻塞方式为其slave提供同步服务. 所以在master - slave 同步期间, 客户端仍然可以提交查询,修改的请求.
4. slave server也是以非阻塞方式完成数据同步的. 在同步期间, 若有客户端提交查询请求, 则返回同步之前的数据.
5. 为了分载master的读压力, slave可以为客户端提供只读的服务, 写服务是由master来完成的.
6. master可将数据保存操作交给slaves完成, 从而避免了在master中要有独立的进程来完成此操作.

在slave启动并连接到master之后, slave会主动发送一个SYNC命令. 然后master会启动后台存盘进程, 同时手机所有接受到的用于修改数据集的命令, 在后台进程执行完毕后, master将传送整个数据库文件到slave, 来完成一次完全同步. slave在接受到数据库文件后将其存盘加载到内存. 此后, master继续将已经收集到的修改命令, 和新的修改命令依次传送给slaves, slave将再依次执行这些数据修改命令, 从而达到最终的数据同步.

如果master和slave之间连接断开, slave会自动重连, 但在重连成功后, 一次完全同步将会自动被执行.
完全同步会传送整个数据库文件到slave, 故会有一定的资源消耗.

Redis的持久化.
1. RDB持久化: 在指定时间间隔内将内存中的数据集快照写入磁盘
2. AOF持久化: 以事物日志的形式记录服务器所处理的每一个写操作, 在redis服务器启动之初会读取该日志文件来重构数据库, 以保证启动后数据库中的数据是完整的. (通过redis-check-aof工具检查)
3. 无持久化: 通过配置禁止启动redis的持久化功能, 来作为一个加强版的memcached.
4. 同时启动AOF和RDB.
注意:
a. AOF文件常常大于RDB文件.
b. AOF在运行效率上往往慢于RDB.
c. AOF的数据一致性要好于RDB.

Redis虚拟内存的使用
1. 若数据库中有大量的keys, 但每个key仅仅关联很小的value, 那么这种情形不适合使用虚拟内存.
2. 若数据库中包含少量的keys, 每个key关联的value都非常大, 这种情形非常适合使用虚拟内存.
默认情况下Redis会将keys/values保存在内存中以提高数据的查询和修改效率.
使用虚拟内存时, 会将不常用的keys 对应的 values换出到磁盘. 当被再次访问时再读进内存.
**注意:**Redis不会将keys交换到磁盘.

换出原则: 将最长时间没有被使用的数据换出, 若两个对象的age相同, 那么value较大的那个将先被换出.

vm-enabled yes
vm-max-memory (bytes)
vm-pages 134217728
vm-page-size 32
vm-max-threads 4

Redis支持管线操作(pipeline), 这样会减少RTT(round trip time)时间开销.
客户端在发送命令后不用等待服务器的应答, 而是可以继续后面的命令. 最后把所有的应答返回给客户端.
服务器会将应答先存入队列, 之后再发送给客户端.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值