Redis是否保留数据?


122

我了解Redis会从内存中提供所有数据,但是在服务器重新启动后它也会持续存在,以便服务器重新启动时它将磁盘中的所有数据读入内存。还是它总是空白存储,仅在应用程序无持久性运行时存储数据?


1
我不确定我是否正确理解您的问题。您可以将快照保存到磁盘并从该文件读取,如果不这样做,则重新引导时redis数据库将为空。
Sefa 2014年

Answers:


81

我建议您在http://redis.io/topics/persistence上阅读有关此内容的信息。基本上,当仅通过内存存储来提高性能时,就会失去保证的持久性。想象一下一个场景,您将它插入内存,但是在它持久存入磁盘之前会断电。将会丢失数据。

Redis支持所谓的“快照”。这意味着它将在某些时间点(例如,每隔一小时)对内存中的内容进行完整的复制。当您在两个快照之间断电时,将从上次快照到崩溃之间的时间丢失数据(不必是停电..)。与大多数NoSQL-DB一样,Redis在数据安全与性能之间进行权衡。

大多数NoSQL数据库都遵循在多个节点之间进行复制的概念,以最大程度地降低这种风险。Redis被认为是一种快速的缓存,而不是保证数据一致性的数据库。因此,它的用例通常不同于真实数据库的用例:例如,您可以存储会话,性能计数器或其中的任何内容,它们具有无与伦比的性能,并且在发生崩溃的情况下不会造成实际损失。但是处理订单/购买历史记录等被认为是传统数据库的工作。


1
如果您可以添加默认的持久性行为,那将是很好的。就像@Leonid Beschastny的答案一样。
yeya

39

Redis服务器会不时将其所有数据保存到HDD,从而提供一定程度的持久性。

在以下情况之一中,它将保存数据:

但是redis中的数据并不是真正持久的,因为:

  • Redis进程崩溃意味着自上次保存以来丢失所有更改
  • BGSAVE 仅当您有足够的可用RAM时才能执行该操作(额外RAM的数量等于redis DB的大小)

注意: BGSAVE RAM的需求是一个真正的问题,因为Redis会继续工作直到没有更多的RAM可运行,但是它会更早地将数据保存到HDD(大约占RAM的50%)。

有关更多信息,请参见Redis Persistence


1
自从写了这个答案以来,redis引入了一个称为AOF的替代性持久性模型,该模型提供了更高的持久性,但还有其他一些缺点,例如更高的磁盘利用率和较慢的服务器启动速度。
Leonid Beschastny

15

这是配置问题。您不能在Redis上保留数据的全部或部分持久性。最佳决策将取决于项目的技术和业务需求。

根据 有关持久性 Redis文档,您可以设置实例,以不时地将数据不时地或在每个查询中保存到磁盘上。它们提供了两种策略/方法AOF和RDB(请阅读文档以了解有关的详细信息),您可以单独使用一种,也可以一起使用。

如果您想要“像持久性这样的SQL”,他们会说:

通常的指示是,如果您希望获得与PostgreSQL可以提供的功能相当的数据安全性,则应同时使用两种持久性方法。


7

答案通常是肯定的,但是更完整的答案实际上取决于您要存储的数据类型。通常,更完整的简短答案是:

  • Redis不是最适合持久存储的,因为它主要是性能方面的
  • Redis确实更适合于可靠地在内存中存储/缓存当前状态数据,尤其是通过为跨多个客户端/服务器使用的数据提供集中的源来实现可伸缩性

话虽如此,默认情况下,Redis 以周期性的时间间隔保留数据快照(显然这是每1分钟一次,但是我尚未验证这一点-以下文章对此进行了介绍,这是一个很好的基本介绍):

http://qnimate.com/redis-permanent-storage/


TL; DR

官方文档

  • RDB持久性 [默认]以指定的时间间隔执行数据集的时间点快照。
  • AOF持久性 [需要显式配置]记录服务器接收的每个写操作,这些操作将在服务器启动时再次播放,以重建原始数据集。

如果需要,必须为AOF持久性显式配置 Redis ,这将导致性能下降以及日志增长。对于有限数量的数据流的相对可靠的持久性可能就足够了。


5

您可以选择没有持久性,性能更好,但是Redis关闭时所有数据都会丢失。

Redis具有两种持久性机制:RDB和AOF。RDB使用调度程序全局快照,AOF将更新写入类似于MySql的仅apappend日志文件。

您可以使用其中之一,也可以使用两者。当Redis重新引导时,它将通过读取RDB文件或AOF文件来构造数据。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.