1:RDB,是redis database backup file(redis数据备份文件,或者redis数据快照).简单来说就是把内存中的所有数据都记录在磁盘中.当redis实例故障重启,从磁盘读取快照文件,恢复数据
命令:
redis-cli
save 由Redis的主进程来执行RDB,会阻塞所有命令
bgsave:由Redis 的子进程来执行RDB,避免主进程受影响
以上是主动备份,redis的配置文件redis.conf
save 900 1 900秒内有1个key被修改会执行bgsave
同理 save 300 10 300秒内有10个key被修改会执行bgsave
RDB执行原理:
需要写入RDB的数据存放在物理内存中,但是linux不能直接从物理内存中取得数据,操作系统会开辟一个虚拟内存,并生成一个页表来存储虚拟内存和物理内存的映射关系,主进程会fork一个子进程,并把页表复制给子进程,这样子进程可以直接从页表中获取数据写一个新的RDB文件替换掉旧的RDB文件,.这时如果主进程执行了写操作,可能会导致脏数据,为了避免这种情况,fork采用copy-on-write技术,物理内存中的数据会拷贝一份,将写数据在拷贝的内存中执行,读数据也会在拷贝的数据中.
2.AOF是Append Only File(追加文件),Redis处理每一个写命令都会记录在AOF文件中,可以看作是命令日志文件
命令:
redis -cli
set num 123
AOF默认关闭,需要修改redis.conf配置文件来开启AOF:
appendonly yes (默认是no)
appendfilename "appendonly.aof"
AOF的记录频率也可以通过redis.conf文件来配
appendfsync.always 表示每执行一次写命令,立即记录到AOF文件
appendfsync everysec 写命令执行完先放入AOF缓冲区,然后表示每隔1秒将缓冲区数据写到AOF文件中,是默认方案
appendfsync no 写命令执行完毕先放入AOF缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
推荐 appendfsync everysec 优点:性能适中,最多丢失一秒的数据
AOF执行原理::AOF是记录命令,会存在对同一个key的多次写操作,但只有最后一次写操作才有意义.通过执行bgrewriteof命令,可以让AOF文件执行重写功能,用最少的命令达到相同的效果.
自动触发配置:auto-aof-rewrite-percentage 100 AOF文件比上次文件增长多少百分比触发重写
auto-aof-rewrite-min-size 64mb AOF文件体积最小多大才触发重写