Redis入门指南(三)

持久化

RDB方式:

rdb方式的持久化是通过快照完成的。符合一定条件时redis会自动将内存中的所有数据生成一份副本并存储在硬盘上,这个过程叫快照。以下几种情况会对数据进行快照:
  1 根据配置规则进行自动快照
  2 用户执行save 或 bgsve命令
  3 执行 flushall 命令
  4 执行复制时

根据配置:save 900 1 ,在900秒内有一个及以上的键被更改则进行快照。
  savebgsave :当进行服务重启、手动迁移以及备份时我们要手动执行。
  - save : redis同步地进行快照操作,在快照执行过程中会阻塞所有来自客户端的请求。
  - bgsave:可以在后台异步地进行快照的操作,执行后会立即返回OK表示开始执行快照操作。如果想知道是否执行完成可以使用lastSave命令获取最近一次成功执行快照的时间。异步看下面原理。
  flushAll 命令:redis会清除数据库中所有数据,不管触发快照与否,只要自动快照条件不为空,就会执行一次。

执行复制时:当设置了主从模式时,redis会在复制初始化时进行自动快中啊。

快照原理

使用fork函数复制一份当前进程的副本(子进程)
  父进程继续接受并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘。
  写完所有数据,会该临时文件替代旧的RDB文件。
PS :redis重启后会读取 RDB 快照文件,将数据载入内存。(执行fork时,操作系统使用写时复制copy-on-write策略,实际上看上去像是生成了一份内存备份保证子进程不受影响,实际内存不会增加。)进行快照时不会修改硬盘的rdb文件,执行完会将旧文件替换成新的。

AOF方式:

使用redis存储非临时数据时

开启:

默认没有开启,开启后每执行一条会更改数据,会写入硬盘的AOF文件。默认文件名是appendonly.aof,可以通过appendfilename参数修改。

AOF实现:

AOF以纯文本的形式记录了redis执行的写命令。达到一定条件,redis会重写AOF文件,节省空间,保留最后的数据。配置: auto-aof-rewrite-percentage 100。
  同步硬盘数据:由于操作系统的缓存机制,数据并没有真正地写入硬盘,而是进入硬盘的缓存。默认情况下,系统30秒会执行一次同步。在这三十秒可能会导致数据丢失,通过参数 appendfsync设置可以每秒执行一次同步操作(默认 everysec,no 表表示不主动同步由操作系统来同步,always表示每次执行写入都会执行同步)。
  redis允许 同时开启 AOF 和 RDB , AOF 方式的持久化可能丢失的数据更少。

主从复制

配置:

一个主库可以拥有多个从库,一个从库只能拥有一个主库,从库一般是只读。从库也可以拥有从库。

  配置方法 :1 从库配置文件加 “slaveof 主库地址 主库端口”,主库无需配置   2  redis命令,从库中:slaveof 主库地址 主库端口。启动 另一个Redis实例,监听 6379 端口:Redis -service --port 6380 --slaveof 127.0.0.1 6379
  redis命令:INFO replication 查看信息。通过从库的配置文件中的slave-read-only 为 no 可以使从库可写。

原理:

从库启动,向主库发送SYNC,主库收到命令,开始保存快照(即RDB持久化的过程),并将此期间收到的命令缓存起来。快照完成,发给从库,从库使用快照和缓存加载数据,完成复制。
(断开后重连,会重新复制初始化。即使数据只更新几条也重新保存快照,这样效率低下。后面提供了 有条件的增量数据传输。)从库同步的时候不会阻塞,serve-stale-data no : 从库备份时不响应请求。

前面是复制初始化,接下来是复制同步过程,主库的热河会导致数据变化的命令都会异步传给从库。此过程会一直持续贯穿整个主从同步过程指导主从关系终止。

从库数据持久化:

为了提高性能,开启从库持久化,禁用主库持久化。当主库崩了,需要手工从从库恢复数据: 1 从库使用 slaveof no one 命令,将从库提升为主库 2 启动崩溃的主库,使用 slave 命令变为从库。

无硬盘复制:

如果主库快照被关闭,则会进行无硬盘复制:直接通过网络发送数据给从库。配置文件:repl-diskless-sync yes

增量复制:

断线重连情况下的优化,Redis会有个ID,根据ID,之前的缓存被放在积压队列中,收到主库的命令时会记录下命令的偏移量,然后根据偏移量对这些进行执行。

集群

只需要将每个数据节点的 Cluster-enabled yes配置选项打开即可。每个集群中至少有3个主库才能正常运行。

节点,槽,槽的重新分配,复制与故障转移

哨兵

功能:1 监控数据库的正常运行 2 主库故障自动提升从库为主库
  使用:(1) 建立sentinel.conf文件,内容为 :sentinel monitor 主数据库名 "ip" "port"  1; (2)接下来启动sentinel进程,将上述配置文件的路径传给哨兵。redis - sentinel  /.../sentinel.conf

  原理:建立两条链接,一条订阅主库的sentinel: hello 频道,另一个定时向主库发送INFO命令。 为每个主库或者从库部署一个哨兵。

posted @ 2019-08-27 00:14  南山的海风  阅读(237)  评论(0编辑  收藏  举报