Redis之使用 (5)

创建RDB文件需要将server所有的数据库数据保存,其过程非常消耗资源和时间,所有server需要隔一段时间才创建一个新的RDB文件,也就是说,创建RDB文件不能执行的过于频繁,否则会严重影响server的性能

可能丢失数据

2. AOF 2.1 配置

存储的是命令,而不是真实的数据

默认不开启

开启方式:

/etc/redis/redis.conf

改 appendonly no为 appendonly yes

改#appendfilename "appendonly.aof"为appendfilename "appendonly.aof"

sudo /etc/init.d/redis-server restart重启服务

2.1 原理

每当有修改数据库的命令被执行的时候,server就会将执行的命令写到AOF文件的末尾

因为AOF文件里面存储了server执行过的所有数据修改的命令。所以给定一个AOF文件,服务器只要重新执行一遍AOF文件里面的所有命令,就可以达到还原数据的目的

2.2 优点

用户可以根据自己的需要对AOF持久化进行调整,让Redis在遭遇意外停电停机时不会丢失任何数据,或者只丢失一秒的数据

aof持久化原理

2.3 策略

编辑配置文件/etc/redis/redis.conf

appendfsync alwarys 服务器每写入一条命令,就将缓冲区里面的命令写入到硬盘里面,server就算意外停机,也不会丢失人格已经成功执行的命令 appendfsync everysec #(默认) server每一秒将缓冲区里面的命令写入到硬盘里面,服务器即使遭受意外停机,最多丢失一秒的数据 appendfsync no server不主动将命令写入硬盘。由操作系统决定何时将缓冲区里面的命令写入到硬盘里面,丢失命令数量不确定

AOF中的冗余命令

为了让AOF文件的大小控制在合理范围,避免胡乱增长,redis提供了AOF重写功能,通过这个功能,server可以产生一个新的AOF文件

-- 新的AOF文件记录的数据库数据和原来的AOF文件记录的数据库数据完全一样

-- 新的AOF文件会使用尽可能少的命令记录数据数据,因此新的AOF文件的体积通常会小很多

-- AOF重写期间,服务器不会阻塞,可以正常处理客户端发送的命令请求

备份重写

2.4 重写触发

client向server发送bgrewriteaof

127.0.0.1:6379> BGREWRITEAOF Background append only file rewriting started

修改配置文件让server自动执行bgrewriteaof命令

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

只有当AOF文件的增量大于100%时才进行重写,也就是大一倍的时候触发

3. 总结

配置文件:/etc/redis/redis.conf

日志文件:/var/log/redis/reids-server.log

RDB文件:/var/lib/redis/dump.rdb

AOF文件:/var/lib/redis/appendonly.aof

3.1 RDB

默认

dir /var/lib/redis

dbfilename dumo.rdb

save 900 1

save 300 10

save 60 10000

3.2 AOF

appendonly yes

appendfilename "appendonly.aof"

appendfsync always

appendfsync everysec

appendfsync no

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

五、主从复制 1. 概述

定义

一个redis服务可以有多个该服务的复制品,这个redis称为master,其他复制品称为slaves

网络正常,master会一致将自己的数据更新同步给slaves,保持主从同步

只有master可以执行写命令,slave只能执行读命令

作用

分担了读的压力(高并发)

原理

从服务器执行客户端发送的读命令,比如GET、LRANGE、SMEMMVERS、HGET、ZRANGE等等,客户端可以连接slaves执行读请求,来降低master的读压力

2. 实现

==法一(命令行)==

redis-server --port 630 --slaveof 127.0.0.1 6379

# 从server端 redis-server --port 6300 --slaveof 127.0.0.1 6379 # 从client端 redis-cli -p 6300 127.0.0.1:6300> keys * # 发现是复制了原6379端口的redis数据 127.0.0.1:6379> set sex man OK 127.0.0.1:6300> keys * 1) "name" 2) "sex" # 从server只能读取数据,不能写入`

主从复制

==法二(命令行)==

127.0.0.1:6379> keys * 1) "name" 2) "sex" 127.0.0.1:6379> set age 18 OK 127.0.0.1:6379> slaveof 127.0.0.1 6379 # 切换为从server OK 127.0.0.1:6379> set newkey 456 (error) READONLY You can't write against a read only slave. 127.0.0.1:6379> keys * 1) "age" 2) "name" 3) "sex" 127.0.0.1:6379> slaveof no one # 切换回主server OK

==法三(修改配置)==

vim /etc/redis/redis.conf

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxwxg.html