内存数据库Redis的持久性的总结

内存数据库Redis的持久性的总结
因为redis是基于内存的数据库,所以为了防止由于系统崩溃导致数据丢失的问题,使用了存储在硬盘上的数据持久性两种不同的方法,一个方法(RDB)是所有数据的快照,它可以在某个时刻发现写入磁盘在里面,另一种方法是只有一个额外的文件(AOF),它将在写命令执行,写命令执行写入硬盘。

快照的持久性

Redis可以创建一个快照时间点上得到一份在存储器中的数据。在创建快照,用户可以备份快照,快照复制到其他服务器,创建具有相同的数据服务器的副本,并留下快照的地方重启服务器。

有两个命令可以用来生成数据库文件,一个是保存,和其他bgsave。

当我们仅使用快照持久性来保存数据时,如果系统真的崩溃,用户将丢失在最新快照之后更改的所有数据。因此,快照持久性只适用于不造成问题的应用程序,即使部分数据丢失。

保存

特点:保存命令块的redis服务器进程直到创建RDB文件和服务器无法处理任何命令请求服务器进程阻塞在。

缺点:在服务器持久性期间不能接受其他请求。

bgsave

特点:该bgsave命令将得到一个子进程,然后通过子进程负责创建RDB文件服务器进程来处理请求的命令。

缺点:用于创建一个孩子的过程时间会占用的内存增加redis。

AOF持久化

AOF持久化将执行的命令的AOF文件结束记录数据的变化。因此,Redis可以恢复从开始到结束在AOF文件包含所有的书面命令,使数据集多种文件记录可以恢复。

设置同步频率时,有三个选项
选项
同步频率

总是
每一个redis写命令应该被写入硬盘的同步,但这会占用的内存使用,严重降低了Redis速度
everysec
同步每秒,将多个写命令同步显式地复制到硬盘上。

操作系统决定何时进行同步
最好使用everysec,可避免书写性能造成的影响,每一次,可以避免操作系统崩溃可能导致数据丢失,即使系统崩溃,大多数用户只会失去一次数据,当硬盘忙于执行写操作时,Redis会缓慢优雅为了适应最大速度的硬盘写入速度。

缺点:由于Redis会连续记录执行的命令以多种文件,以便使用继续执行,AOF文件的数量也会增加。在极端的条件下,多种可能用完所有可用空间的硬盘。

为了解决以上的不足,提供了bgrewriteaof Redis命令,这将消除在AOF文件冗余命令重写AOF文件,使得AOF文件尽可能的小,bgsave命令类似的原则,Redis创建一个子进程,然后子进程负责重写AOF文件,因为AOF文件重写也需要使用子过程,所以也有持续性由于快照创建一个子进程造成的性能和内存占用问题。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部