always:服务器每写入一个命令,就调用一次fdatasync,将缓冲区里面的命令写入到硬盘。这种模式下,服务器出现故障,也不会丢失任何已经成功执行的命令数据
everysec(默认):服务器每一秒重调用一次fdatasync,将缓冲区里面的命令写入到硬盘。这种模式下,服务器出现故障,最多只丢失一秒钟内的执行的命令数据
no:服务器不主动调用fdatasync,由操作系统决定何时将缓冲区里面的命令写入到硬盘。这种模式下,服务器遭遇意外停机时,丢失命令的数量是不确定的,no 选项并不能给服务器性能带来多大的提升,而且也会增加系统奔溃时数据丢失的数量。
运行速度:always的速度慢,everysec和no都很快
3.2.3 重写机制AOF文件过大,合并重复的操作,AOF会使用尽可能少的命令来记录
重写过程
(1)folk一个子进程负责重写AOF文件
(2)子进程会创建一个临时文件写入AOF信息
(3)父进程会开辟一个内存缓冲区接收新的写命令
(4)子进程重写完成后,父进程会获得一个信号,将父进程接收到的新的写操作由子进程写入到临时文件中
(5)新文件替代旧文件
重写的本质:就是将操作同一个键的命令,合并。从而减小AOF文件的体积
重写触发机制
(1)手动:
客户端向服务器发送BGREWRITEAOF命令
(2)自动:
配置文件中的选项,自动执行BGREWRITEAOF命令
auto-aof-rewrite-min-size :触发AOF重写所需的最小体积:只要在AOF文件的体积大于等于size时,才会考虑是否需要进行AOF重写,这个选项用于避免对体积过小的AOF文件进行重写
auto-aof-rewrite-percentage :指定触发重写所需的AOF文件体积百分比:当AOF文件的体积大于auto-aof-rewrite-min-size指定的体积,并且超过上一次重写之后的AOF文件体积的percent %时,就会触发AOF重写。(如果服务器刚刚启动不久,还没有进行过AOF重写,那么使用服务器启动时载入的AOF文件的体积来作为基准值)。将这个值设置为0表示关闭自动AOF重写。
优点
写入机制,默认fysnc(手工同步)每秒执行,性能很好不阻塞服务,最多丢失一秒的数据;
重写机制,优化AOF文件;
如果误操作了(FLUSHALL等),只要AOF未被重写,停止服务移除AOF文件尾部FLUSHALL命令,重启Redis,可以将数据集恢复到FLUSHALL 执行之前的状态。
缺点
相同数据集,AOF文件体积较RDB大了很多;
恢复数据库速度较RDB慢(文本,命令重演)
四、集群 4.1 redis集群简介 4.1.1 集群的概念所谓的集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态。
4.1.1.1 使用redis集群的必要性问题:我们已经部署好了redis,并且能启动一个redis,实现数据的读写,为什么还要学习redis集群?
答:(1)单个redis存在不稳定性。当redis服务宕机了,就没有可用的服务了。
(2)单个redis的读写能力是有限的。
总结:redis集群是为了强化redis的读写能力。
4.1.1.2 如何学习redis集群说明:(1)redis集群中,每一个redis称之为一个节点。
(2)redis集群中,有两种类型的节点:主节点(master)、从节点(slave)。
(3)redis集群,是基于redis主从复制实现。
所以,学习redis集群,就是从学习redis主从复制模型开始的。
4. 2 redis主从复制 4.2.1 概念主从复制模型中,有多个redis节点。
其中,有且仅有一个为主节点Master。从节点Slave可以有多个。
只要网络连接正常,Master会一直将自己的数据更新同步给Slaves,保持主从同步。
4.2.2 特点(1)主节点Master可读、可写.
(2)从节点Slave只读。(read-only)
因此,主从模型可以提高读的能力,在一定程度上缓解了写的能力。因为能写仍然只有Master节点一个,可以将读的操作全部移交到从节点上,变相提高了写能力。
4.2.3 基于配置实现需求
主节点:6380
从节点:6381、6382
配置步骤
(1)在/usr/local目录下,创建一个/redis/master-slave目录
mkdir -p /usr/local/redis/master-slave(2)在master-slave目录下,创建三个子目录6380、6381、6382
mkdir 6380 6381 6382(3)依次拷贝redis解压目录下的redis.conf配置文件,到这三个子目录中
cp /usr/local/src/redis-5.0.4/redis.conf 6380/ cp /usr/local/src/redis-5.0.4/redis.conf 6381/ cp /usr/local/src/redis-5.0.4/redis.conf 6382/(4)进入6380目录,修改redis.conf,将port端口修改成6380即可
(5)进入6381目录,修改redis.conf,将port端口改成6381,同时指定开启主从复制
# 主节点ip 主节点端口 replicaof 127.0.0.1 6380(6)进入6382目录,修改redis.conf,将port端口改成6382,同时指定开启主从复制
测试
(1)打开三个shell窗口,在每一个窗口中,启动一个redis节点。查看日志输出。(不要改成后台模式启动,看不到日志,不直观)
(2)另外再打开三个shell窗口,在每一个窗口中,登陆一个redis节点
(3)在主节点6380上,进行读写操作,操作成功