定义
将数据从掉电易失的内存放到永久储存的设备上
因为所有的数据都在内存是,所有必须得持久化
redis提供两种持久化方案
RDB默认开启、AOF
RDB
1,保存真是的数据
2,将服务器包含的所有数据库数据以二进制文件形式保存到磁盘里面
3,默认文件名:/var/lib/redis/dump.rdb
文件名及目录可在配置文件中修改【/etc/redis/redis.conf】
263行:dir /var/lib/redis #表示rdb文件存放路径
253行:dbfilename dump.rdb #文件名
出发rdb持久化-redis终端
方式1 redis终端中使用save或者bgsave命令
save
#特点
1,执行SAVE命令过程中,redis服务器将被阻塞,无法处理客户端发送的命令请求,在SAVE命令执行完毕后,服务器才会重新开始处理客户端发送的命令请求
2,如果RDB文件已经存在,那么服务器将自动使用新的RDB文件代替旧的RDB文件
bgsave
#执行过程
1,客户端 发送 BGSAVE给服务器
2,服务器马上返回Background saving started 给客户端
3,服务器fork()子进程做这个事
4,服务器继续提供服务
5,子进程创建完RDB文件后再告知Redis服务器
SAVE 比 BGSAVE快 ,因为需要创建子进程,消耗额外内存,说明:可以通过查看日志文件来查看redis的持久化过程
logfile 位置 /var/log/redis/redis-server.log
触发rdb持久化-设置配置文件
redis 配置文件默认
218 save 900 1
219 save 300 10
表示距离上次创建RDB文件已经过去了300秒,并且服务器的所有数据库总共已经发生了不少于10次修改,那么自动执行BGSAVE命令
200 save 60 10000
1,只要三个条件中的任意一个被满足时,服务器就会自动执行BGSAVE
2,每次创建RDB文件后,服务器为实现持久化而设置时间计数器和次数计数器就会被清0,所以多个保存条件的效果不会叠加
出花RDB持久化-redis关闭
redis再正常关闭时,也会执行保存rdb操作
特殊说明
1,创建rdb文件需要将服务器所有的数据库的数据都保存起来,这是一个非常消耗资源和时间的操作,所以服务器需要隔一段时间才创建一个新的RDB文件,也就是说,创建RDB文件不能执行过于频繁,否则会严重影响服务器性能
2,可能丢失数据
AOF基础概念
1,存储的是命令,而不是真实数据
2,默认不开启
开启方式(修改配置文件)
1, /etc/redis/redis.conf
672:appendonly yes #把no改为yes
676:appendfilename 'appendonly.aof'
2,重启服务
sudo /etc/init.d/redis-server restart
执行原理
1,每当有修改数据库命令被执行时,
2,因为AOF文件里面存储了服务器执行过的所有数据库修改的命令,所以给定一个AOF文件,服务器只要重新执行一边AOF文件里面包含的所有命令,就可以达到还原数据库的目的
用户可以根据自己的需要对AOF持久化进行调整,让redis在遭遇意外停机时不丢失任何数据,或者只丢失一秒钟的数据,这比RDB持久化丢的数据要少得多
特殊说明
虽然服务器执行一个修改数据库目录,就会把执行的命令写入到AOF文件,但这并不意味着AOF文件持久化不会丢失任何数据,在目前常见的操作数据中,执行系统调用writer函数,将一些内容写入到某个文件里面时,为了提高效率,系统通常不会直接将内容写入硬盘里面,而是将内容放入一个内存缓存区buffer里面,等到缓冲区被填满时才将存储的缓冲区里面的内容真正写入到硬盘里
1,AOF持久化:当一条命令真正的被写入到硬盘里面时,这条命令才不会因为停机而意外丢失
2,AOF持久化在遭遇停机时丢失命令的数量,取决于命令被写入到的硬盘的时间
3,越早将命令写入到硬盘,发生意外停机时丢失的数据越少
相关配置
触发