我知道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。
推荐文章
- Redis持久化数据吗?
- 我如何移动一个redis数据库从一个服务器到另一个?
- Redis比mongoDB快多少?
- 在Redis中打印按键数量
- Redis是单线程的,那么它如何做并发I/O?
- 如何连接远程Redis服务器?
- 无法连接到Redis在127.0.0.1:6379:连接拒绝与自制
- 多Redis数据库的意义是什么?
- 如何列出所有的Redis数据库?
- 为什么我们需要像RabbitMQ这样的消息代理而不是像PostgreSQL这样的数据库?
- 检查Redis服务器版本
- Redis键命名约定?
- Linux—只安装redis-cli
- Redis只是一个缓存吗?
- 对持有错误类型值php的键进行操作