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


当前回答

答案通常是肯定的,但更全面的答案实际上取决于您试图存储的数据类型。一般来说,更完整的简短回答是:

Redis并不是最适合持久存储的,因为它主要关注性能 Redis确实更适合于可靠的内存中存储/缓存当前状态数据,特别是通过提供跨多个客户端/服务器使用的中央数据源来实现可伸缩性

话虽如此,默认情况下,Redis会定期保存数据快照(显然是每1分钟保存一次,但我还没有验证这一点——这在下面的文章中有描述,这是一个很好的基本介绍):

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


博士TL;

官方文件显示:

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

如果需要的话,Redis必须显式地配置AOF持久性,这将导致性能损失以及不断增长的日志。对于有限数量的数据流的相对可靠的持久性来说,它可能足够了。

其他回答

我建议你在http://redis.io/topics/persistence上阅读这篇文章。当您仅使用内存存储来提高性能时,基本上就失去了保证的持久性。想象一下这样一个场景:插入到内存中,但是在它被持久化到磁盘之前失去了电源。会有数据丢失。

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

Most NoSQL-databases follow a concept of replication among multiple nodes to minimize this risk. Redis is considered more a speedy cache instead of a database that guarantees data consistency. Therefore its use cases typically differ from those of real databases: You can, for example, store sessions, performance counters or whatever in it with unmatched performance and no real loss in case of a crash. But processing orders/purchase histories and so on is considered a job for traditional databases.

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

在以下情况下保存数据:

时不时地自动 手动调用BGSAVE命令时 当redis关闭时

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

redis进程崩溃意味着丢失自上次保存以来的所有更改 只有当你有足够的空闲RAM(额外的RAM等于redis DB的大小)时才能执行BGSAVE操作。

注意:BGSAVE内存需求是一个真正的问题,因为redis继续工作,直到没有更多的RAM运行,但它停止保存数据到HDD更早(大约在10分钟)。50%的RAM)。

更多信息请参见Redis Persistence。

答案通常是肯定的,但更全面的答案实际上取决于您试图存储的数据类型。一般来说,更完整的简短回答是:

Redis并不是最适合持久存储的,因为它主要关注性能 Redis确实更适合于可靠的内存中存储/缓存当前状态数据,特别是通过提供跨多个客户端/服务器使用的中央数据源来实现可伸缩性

话虽如此,默认情况下,Redis会定期保存数据快照(显然是每1分钟保存一次,但我还没有验证这一点——这在下面的文章中有描述,这是一个很好的基本介绍):

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


博士TL;

官方文件显示:

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

如果需要的话,Redis必须显式地配置AOF持久性,这将导致性能损失以及不断增长的日志。对于有限数量的数据流的相对可靠的持久性来说,它可能足够了。

许多消息不灵通和相对较新的用户认为Redis只是一个缓存,而不是可靠持久性的理想选择。 现实情况是,DB、Cache(以及更多类型)之间的界限现在已经模糊了。

它都是可配置的,作为用户/工程师,我们可以选择将其配置为缓存,DB(甚至是混合)。

每个选择都有收益和成本。Redis也不例外,所有知名的分布式系统都提供了配置不同方面的选项(持久性、可用性、一致性等)。所以,如果你在默认模式下配置Redis,希望它能神奇地给你高可靠的持久性,那么这是团队/工程师的错误(而不是Redis的错误)。

我已经在我的博客上更详细地讨论了这些方面。

另外,这是Redis本身的一个链接。

这是一个配置问题。你可以在Redis上没有、部分或全部持久化数据。最佳决策将由项目的技术和业务需求驱动。

根据Redis关于持久性的文档,简而言之,你可以设置你的实例,随时或每次查询时将数据保存到磁盘。它们提供了两种策略/方法AOF和RDB(请阅读文档查看详细信息),您可以单独使用它们,也可以同时使用它们。

如果你想要一个“类似SQL的持久性”,他们说:

一般的提示是,如果你想要达到与PostgreSQL提供的数据安全程度相当的数据安全性,你应该同时使用这两种持久性方法。