当前位置: 首页 > 编程笔记 >

内存型数据库Redis持久化小结

罗源
2023-03-14
本文向大家介绍内存型数据库Redis持久化小结,包括了内存型数据库Redis持久化小结的使用技巧和注意事项,需要的朋友参考一下

因为Redis是内存型数据库,所以为了防止因为系统崩溃等原因导致数据丢失的问题,Redis提供了两种不同的持久化方法来将数据存储在硬盘里面,一种方法是快照(RDB),它可以将存在于某一个时刻的所有数据都写入到硬盘里面,另外一种方法是只追加文件(AOF),它会在执行写命令时,将被执行的写命令都写入到硬盘里面。

快照持久化

Redis可以通过创建快照来获得在内存里面的数据在某一个时间点上的副本。在创建快照之后,用户可以对快照进行备份,可以将快照复制到其它服务器从而创建具有相同数据的服务器副本,还可以将快照留在原地以便重启服务器时使用。

有两个命令可以用于生成RDB文件,一个是SAVE,另外一个BGSAVE。

在只使用快照持久化来保存数据时,如果系统真的发生崩溃,用户将丢失最近一次生成快照之后更改的所有数据。因此,快照持久化只适用于那些即使丢失一部分数据也不会造成问题的应用程序

SAVE

特点:SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完毕,在服务器进程阻塞期间,服务器不能处理任何命令请求。

缺点:服务器持久化期间无法接受其它请求。

BGSAVE

特点:BGSAVE命令则会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程则继续处理命令请求。

缺点:创建子进程所耗费的时间会随着Redis占用的内存而增加。

AOF持久化

AOF持久化会将被执行的写命令写到AOF文件的末尾,以此来纪录数据所发生的变化,因此,Redis只要从头到尾重新执行一次AOF文件所包含的所有写命令,就可以恢复AOF文件所记录的数据集。

在设置同步频率的时候,存在三个选项:

选项 同步频率
always 每个Redis写命令都要同步写入硬盘,但是这样做会占用Redis所拥有的内存,严重降低Redis的速度
everysec 每秒执行一次同步,显式地将多个写命令同步到硬盘
no 让操作系统来决定应该何时进行同步

最好使用everysec,既能避免每次都写入所造成的性能影响,又能避免操作系统崩溃所导致的可能丢失不定量数据,其即使系统崩溃,用户最多只会丢失一秒之内产生的数据,当硬盘忙于执行写入操作的时候,Redis还会优雅的放慢自己的速度以便适应硬盘的最大写入速度。

缺点:因为Redis会不断的将被执行的写命令纪录到AOF文件里面,所以随着Redis不断执行,AOF文件的体积也会不断增长,极端条件下,AOF甚至可能会用完硬盘的所有可用空间。

为了解决上面的缺点,Redis提供了BGREWRITEAOF命令,这个命令会通过移除AOF文件中的冗余命令来重写AOF文件,使得AOF文件尽可能的小。它的原理和BGSAVE命令相似,Redis会创建一个子进程,然后由子进程负责对AOF文件进行重写,因为AOF文件重写也需要用到子进程,所以同样存在快照持久化因为创建子进程所导致的性能问题和内存占用问题。

 类似资料:
  • 我在研究内存数据库的概念。有关这方面的文章说, 内存数据库系统是一种将数据完全存储在主存中的数据库管理系统。 他们讨论了这个概念的优点和缺点。 我的问题是如果这些数据库管理系统将数据完全存储在主存储器中, 停电后所有数据都消失了吗??? 还是有办法保护数据???

  • 目的 配置 NFS 共享为 OpenShift 节点提供存储,并且配置 OpenShift 持久卷以绑定至数据库 Pod。 环境 openshift v3.11.16/kubernetes v1.11.0 步骤 配置 NFS 共享持久卷1. 登录到 NFS 服务器 # ssh nfs.example.com2. 创建 config-nfs.sh 脚本,内容如下 #!/usr/bin/sh exp

  • 我知道Redis从内存中提供所有数据,但它是否也可以在服务器重新引导时持久存在,这样当服务器重新引导时,它将从磁盘中读取所有数据到内存中。或者它总是一个空白存储,只存储数据,而应用程序运行没有持久性?

  • 主要内容:一、数据持久化,二、持久化的形式,三、源码分析,四、总结一、数据持久化 redis做为一种内存型数据库,做持久化,个人感觉略有鸡肋的意思。似乎有一种,别人有,自己不有也不行的感觉。以目前Redis主流的应用方式,如果仔细分析,基本上都是在内存中即可完成,对持久化没要求或者说不大。再举一个反例,如果内存中有几百G甚至更多的数据,真要是整体当机,恢复的时间基本就是灾难。 目前基本应用仍然是以关系型数据库或者其它数据库(如Hadoop,Mysql等)为持久化

  • Redis 支持持久化,即把数据存储到硬盘中。 Redis 提供了两种持久化方式: RDB 快照(snapshot) - 将存在于某一时刻的所有数据都写入到硬盘中。 只追加文件(append-only file,AOF) - 它会在执行写命令时,将被执行的写命令复制到硬盘中。 这两种持久化方式既可以同时使用,也可以单独使用。 将内存中的数据存储到硬盘的一个主要原因是为了在之后重用数据,或者是为了防

  • 问题内容: 我所说的“耐用”是指服务器可以随时崩溃,只要磁盘保持完好无损,就不会丢失任何数据(请参阅ACID)。好像这就是日记模式的用途,但是如果启用日记功能,这是否会破坏对内存数据进行操作的目的?读操作可能不受日记影响,但是日记似乎会破坏您的写入性能。 问题答案: 即使使用日志记录,Redis 通常 也不会部署为“耐用”数据存储(在ACID中为“ D”的含义)。大多数用例有意牺牲一些耐用性以换取