redis简介
redis是一个基于内存的nosql数据库,和传统关系数据最大的区别就是数据是存在内存中而不是硬盘上,从而带来了tps的巨大提升。但是基于内存的数据库最大的缺陷就是机器断电或者系统崩溃后数据会全部丢失。但是redis可以有一套自己的持久化机制,可以让他在系统断电或者崩溃后尽可能的少丢数据。下面就来总结下redis提供的持久化机制的各个特性。
redis提供的持久化选项
redis一共提供两种不同的持久化方法。一种是快照(snapshotting) 它可以将存于某一时刻的数据都写入硬盘里面。还有一种是只追加文件(append-only file AOF),它会在执行命令时,将被执行的写入命令复制到硬盘里面。这两种方法既可以单独使用也可以同时使用。
快照持久化
快照持久化通过写入dbfilename选项指定的文件里面,并储存在dir选项指定的路径上面。如果在新的快照文件创建完成之前,redis,系统或者硬件这三者之中的任意一个崩溃来,那么redis将丢失最近一次创建快照完成之后的所以写入数据
创建快照方法
1.通过客户端发送bgsave命令来创建一个快照,redis会创建一个子进程来负责写入这个快照,父进程继续处理命令请求
2.通过客户端发送save命令来创建一个快照,redis接到save命令在快照创建完成之前不再响应任何命令
3.用户配置了save配置选项,如save 60 10000 ,那么从redis最近一次创建快照开始之后,当“60秒内10000次写入”这个条件被满足时会自动触发bgsave命令。如果有多个save配置满足任意一个就会触发bgsave。
4.redis通过shutdown命令接受到关闭服务器请求时,或者收到标准的term命令时会执行save命令,阻塞所有客户端,不再执行客户端发送的命令,知道save命令执行完毕后直接关闭redis服务器。
5.当一台redis服务器连接到另一台redis服务器,并向对方发送sync命令来开始复制操作的时候,如果主服务器目前没有在执行bgsave操作,或者主服务器并非刚刚执行完bgsave操作,那么主服务器会执行bgsave命令。
AOF持久化
AOF持久化就是将被执行的写命令写到AOF文件的末尾,以此来记录数据发送的变化。因此redis只要从头到尾执行一次AOF文件包含的所有写命令,就可以护肤AOF文件所记录的数据。
AOF持久化的创建方法
通过配置 appendonly yes 来打开,通过appendsync来配置AOF文件的同步频率。
appendsync同步频率有下面这些
always 每个redis写命令都同步写入硬盘。(严重影响性能)
everysec 每秒执行一次同步,显示地将多个写命令同步到硬盘
no 让操作系统来决定应该何时同步。