redis

作者: 哓晓的故事 | 来源:发表于2019-01-24 10:17 被阅读0次

1. 持久化

RDB(快照):

  • 按一定规则(定时+修改量)进行备份 - 推荐使用独立的机械磁盘,因为是顺序写的
  • 存在 丢失最后一份 数据的情况,会生成一个临时文件
  • 从主进程fork一个子进程(copy-on-write)来独立备份临时文件,备份完成后压缩,再替换原有的文件
  • 当开始dump rdb的时候, 如果cpu资源很紧张可能影响线上功能, 不在 master 上做快照, 由 slave replica 来做快照.

AOP(增量):

  • 记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录(可以选择不同的同步策略)
  • 当aof文件大于一个值的时候会rewrite, 主线程 fork 一个 带有副本的子线程
  • 主线程在rewrite期间的写操作会同时保存在内存的aof buffer 和 aof rewrite buffer中,当子线程rewrite成功后, 向主线程发送一个 SIGTERM 信号, 主线程 block 住将aof rewrite buffer中的数据flush 到新的aof临时文件,将临时文件会代替AOF文件

2. 支持类型

  1. string (int/embstr/raw)
  2. list (ziplist/linkedlist)
  3. hash (hashtable/ziplist)
  4. set(无序) (hashtable/intset)
  5. zset(有序) (skiplist/ziplist) 通过double分数来排序

3. 单线程为什么快

  1. 操作基本都是基于内存,不消耗cpu,速度够快,不需要多进程
  2. 采用多路复用非阻塞I/O方式, 监听多个链接
    • 内部采用reactor模式, 事件驱动
    • I/O多路复用处理器会将产生事件的套接字入队列, 文件事件分派器读队列, 将事件分配给对应的处理器
  3. 单线程, 减少了上下文切换损耗

4. redis集群方案

4.1 主从复制

主master写,从slave读
初始化时,slave放松syn给master,master将快照传递给slave,slave加载
非初始化,每次master写都会sync给slave

4.2 哨兵

4.3 集群

  1. 自动将数据进行分片(slot),每个master上放一部分数据
  2. 提供内置的高可用支持,部分master不可用时,还是可以继续工作的
  3. 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽

现在要将Master A节点中编号为1、2、3的slot迁移到Master B节点中,在slot迁移的中间状态下,slot 1、2、3在Master A节点的状态表现为MIGRATING(迁移),在Master B节点的状态表现为IMPORTING(入口) - 而迁移过程中(不刷新node-slot的映射关系),还是有A节点提供服务,直到slot迁移完成

  1. 将A节点 键值空间dump下来
  2. 在B节点 将dump文件restore
  3. 将A节点 键值空间删除
  4. 刷新node映射关系

相关文章

网友评论

      本文标题:redis

      本文链接:https://www.haomeiwen.com/subject/lofyjqtx.html