目录
一、redis配置文件
redis启动时通过配置文件redis.conf启动
1. include
可以通过include包含多组配置文件
2. 网络配置
ip绑定;端口绑定(默认6379)
3. 日志输出文件
默认输出级别logleve notice;日志文件名logfile;数据库默认数量16个
4. rdb持久化规则
持久化文件:dump.rdb
save 900 1 //默认900秒内至少1个key发生变化,则重写rdb文件
save 300 10
save 60 10000
5.aof持久化规则
appendonly no //默认不开启aof模式;默认使用rdb方式持久化;
appendsync ways(每次修改都会同步)/everysync(默认每秒执行一次同步)/no
6.显示clients
reids链接对大数量;内置最大内存大小;
内存大小达到限制值的默认处理策略:volatile-lru(删除设置了过期时间的key中最近没有使用的)
...
二、持久化之RDB(Redis DateBase)
1. 什么是RDB?
在指定的时间间隔后,将将内存中的数据集快照写入数据库,在恢复的时候,直接读取快照文件dump.rdb进行恢复
2. RDB的触发方式
a. 手动触发
执行save函数和bgsave函数会生成rdb操作
save命令执行后同步执行rdb保存操作,将当前rdb实例中所有的数据快照(snapshot),以rdb文件的方式保存到磁盘;save同步主进程,只有等save完成后,才能进行新的操作
bgsave命令执行后,redis会fork一个子进程,原来的主进程继续后续的操作。子进程负责把数据保存到磁盘中,然后退出;bgsave会fork子进程,非阻塞,执行完成后通知主进程,然后关闭子进程
b. 自动触发(最常见)
自动触发是最常见的情况,配置文件redis.conf中配置的 save m n,默认是save 900 1
3. 触发机制
a. redis.conf配置文件中save m n 规则满足时,会自动触发rdb规则
b. 执行flushall命令时,会触发rdb规则
c. 退出redis时,会触发rdb规则,自动生成rdb文件
4. RDB持久化原理(自动触发)
在进行RDB的时候,主线程是不进行IO操作,会fork一个子进程来完成该操作;
a. redis内部的定时器,每隔100秒执行一次,检查save m n条件是否满足,满足的话执行bgsave
b. 执行bgsave命令后,redis会通过操作系统fork一个子进程
c. 子进程先把数据写入一个临时的rdb文件,待持久化结束后,再用新的rdb文件替换旧的rdb文件
整个过程子进程进行写操作,父进程依旧可以接受客户端的请求(写时复制机制,高效)
写时复制机制(copy on write)
redis主线程通过操作系统fork出线程的同时,父子进程共享内存空间,父进程的内存页权限被设置为read-only,当父进程要写操作时,主进程会把该数据页数据复制一份,父子进程共有。并且该数据页新内存地址为copy出来的数据页地址,进而进行write操作,与子进程的rdb操作互不影响。
5. RDB的优缺点
优点:适合大规模数据恢复;对数据的完整性要求不高
缺点:redis宕机导致最后一次的修改数据没有了;fork子进程需要占内存空间
三、持久化之AOF(append only file)
1. 什么是AOF
把所有的redis写操作命令都记录在appendonly.aof文件中,只追加不修改,redis重启恢复数据时执行一遍aof文件即可。
2. 如何开启AOF
rdb会在宕机时丢失最后一次数据,因此实际线上环境会同时开启rdb和aof
在redis.conf配置文件中设置开启aof即可
3. AOF的优缺点
优点:每次修改都偶会同步,文件完整性较好
缺点:数据文件比aof比rdb大很多,修复速度慢,因此redis默认使用rdb持久化