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


当前回答

你可以选择完全不坚持。更好的性能,但所有的数据丢失时,Redis关闭。

Redis有两种持久机制:RDB和AOF。RDB使用调度程序全局快照,AOF将更新写入与MySql类似的只能追加的日志文件。

你可以用其中一个,也可以两个都用。当Redis重新启动时,它通过读取RDB文件或AOF文件来构造数据。

其他回答

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

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提供的数据安全程度相当的数据安全性,你应该同时使用这两种持久性方法。

你可以选择完全不坚持。更好的性能,但所有的数据丢失时,Redis关闭。

Redis有两种持久机制:RDB和AOF。RDB使用调度程序全局快照,AOF将更新写入与MySql类似的只能追加的日志文件。

你可以用其中一个,也可以两个都用。当Redis重新启动时,它通过读取RDB文件或AOF文件来构造数据。

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

在以下情况下保存数据:

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

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

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

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

更多信息请参见Redis Persistence。