当“重写子进程”完成重写工作后 , 它会给父进程发一个信号 , 父进程收到信号后就会将内存中缓存的写指令追加到新AOF文件中 。
当追加结束后 , redis就会用新AOF文件来代替旧AOF文件 , 之后再有新的写指令 , 就都会追加到新的AOF文件中了 。
【聊聊redis持久化 – 如何选择RDB和AOF】
对于我们应该选择RDB还是AOF , 官方的建议是两个同时使用 。这样可以提供更可靠的持久化方案 。
【聊聊主从 – 用法】
文章插图
像MySQL一样 , redis是支持主从同步的 , 而且也支持一主多从以及多级从结构 。
主从结构 , 一是为了纯粹的冗余备份 , 二是为了提升读性能 , 比如很消耗性能的SORT就可以由从服务器来承担 。
redis的主从同步是异步进行的 , 这意味着主从同步不会影响主逻辑 , 也不会降低redis的处理性能 。
主从架构中 , 可以考虑关闭主服务器的数据持久化功能 , 只让从服务器进行持久化 , 这样可以提高主服务器的处理性能 。
在主从架构中 , 从服务器通常被设置为只读模式 , 这样可以避免从服务器的数据被误修改 。但是从服务器仍然可以接受CONFIG等指令 , 所以还是不应该将从服务器直接暴露到不安全的网络环境中 。如果必须如此 , 那可以考虑给重要指令进行重命名 , 来避免命令被外人误执行 。
【聊聊主从 – 同步原理】
从服务器会向主服务器发出SYNC指令 , 当主服务器接到此命令后 , 就会调用BGSAVE指令来创建一个子进程专门进行数据持久化工作 , 也就是将主服务器的数据写入RDB文件中 。在数据持久化期间 , 主服务器将执行的写指令都缓存在内存中 。
在BGSAVE指令执行完成后 , 主服务器会将持久化好的RDB文件发送给从服务器 , 从服务器接到此文件后会将其存储到磁盘上 , 然后再将其读取到内存中 。这个动作完成后 , 主服务器会将这段时间缓存的写指令再以redis协议的格式发送给从服务器 。
另外 , 要说的一点是 , 即使有多个从服务器同时发来SYNC指令 , 主服务器也只会执行一次BGSAVE , 然后把持久化好的RDB文件发给多个下游 。在redis2.8版本之前 , 如果从服务器与主服务器因某些原因断开连接的话 , 都会进行一次主从之间的全量的数据同步;而在2.8版本之后 , redis支持了效率更高的增量同步策略 , 这大大降低了连接断开的恢复成本 。
主服务器会在内存中维护一个缓冲区 , 缓冲区中存储着将要发给从服务器的内容 。从服务器在与主服务器出现网络瞬断之后 , 从服务器会尝试再次与主服务器连接 , 一旦连接成功 , 从服务器就会把“希望同步的主服务器ID”和“希望请求的数据的偏移位置(replication offset)”发送出去 。主服务器接收到这样的同步请求后 , 首先会验证主服务器ID是否和自己的ID匹配 , 其次会检查“请求的偏移位置”是否存在于自己的缓冲区中 , 如果两者都满足的话 , 主服务器就会向从服务器发送增量内容 。
增量同步功能 , 需要服务器端支持全新的PSYNC指令 。这个指令 , 只有在redis-2.8之后才具有 。
【聊聊redis的事务处理】
众所周知 , 事务是指“一个完整的动作 , 要么全部执行 , 要么什么也没有做” 。
在聊redis事务处理之前 , 要先和大家介绍四个redis指令 , 即MULTI、EXEC、DISCARD、WATCH 。这四个指令构成了redis事务处理的基础 。
1.MULTI用来组装一个事务;
2.EXEC用来执行一个事务;
3.DISCARD用来取消一个事务;
4.WATCH用来监视一些key , 一旦这些key在事务执行之前被改变 , 则取消事务的执行 。
纸上得来终觉浅 , 我们来看一个MULTI和EXEC的例子:
redis> MULTI //标记事务开始
OK
redis> INCR user_id //多条命令按顺序入队
QUEUED
redis> INCR user_id
推荐阅读
- 30 分钟包你学会 AWK
- 使用 SpringBoot Admin 监控你的 SpringBoot 程序
- 没有秘密的你免费资源 百度网盘密享功能有什么用
- ps笔刷不会用?教你设置好用的笔刷!
- 世界那么大,何必用百度?搜索引擎汇总,总有一款适合你
- 打开引擎盖全是油和灰,这应该怎么清洗?老司机:教你一些小妙招
- 买车被强制在4S店投保?别着急,教你一招出门就能退,他还没办法
- 日本的七大不可思议 日本人令人不能理解的行为
- 全球著名辣椒大赏!你认识几个?
- 教你在家就能做的蜜汁鸡翅,步骤简单,皮脆肉嫩,骨头都酥香入味