Answers:
我建议您在http://redis.io/topics/persistence上阅读有关此内容的信息。基本上,当仅通过内存存储来提高性能时,就会失去保证的持久性。想象一下一个场景,您将它插入内存,但是在它持久存入磁盘之前会断电。将会丢失数据。
Redis支持所谓的“快照”。这意味着它将在某些时间点(例如,每隔一小时)对内存中的内容进行完整的复制。当您在两个快照之间断电时,将从上次快照到崩溃之间的时间丢失数据(不必是停电..)。与大多数NoSQL-DB一样,Redis在数据安全与性能之间进行权衡。
大多数NoSQL数据库都遵循在多个节点之间进行复制的概念,以最大程度地降低这种风险。Redis被认为是一种快速的缓存,而不是保证数据一致性的数据库。因此,它的用例通常不同于真实数据库的用例:例如,您可以存储会话,性能计数器或其中的任何内容,它们具有无与伦比的性能,并且在发生崩溃的情况下不会造成实际损失。但是处理订单/购买历史记录等被认为是传统数据库的工作。
Redis服务器会不时将其所有数据保存到HDD,从而提供一定程度的持久性。
在以下情况之一中,它将保存数据:
BGSAVE
命令时但是redis中的数据并不是真正持久的,因为:
BGSAVE
仅当您有足够的可用RAM时才能执行该操作(额外RAM的数量等于redis DB的大小)注意: BGSAVE
RAM的需求是一个真正的问题,因为Redis会继续工作直到没有更多的RAM可运行,但是它会更早地将数据保存到HDD(大约占RAM的50%)。
有关更多信息,请参见Redis Persistence。
这是配置问题。您不能在Redis上保留数据的全部或部分持久性。最佳决策将取决于项目的技术和业务需求。
根据 有关持久性 Redis文档,您可以设置实例,以不时地将数据不时地或在每个查询中保存到磁盘上。它们提供了两种策略/方法AOF和RDB(请阅读文档以了解有关的详细信息),您可以单独使用一种,也可以一起使用。
如果您想要“像持久性这样的SQL”,他们会说:
通常的指示是,如果您希望获得与PostgreSQL可以提供的功能相当的数据安全性,则应同时使用两种持久性方法。
答案通常是肯定的,但是更完整的答案实际上取决于您要存储的数据类型。通常,更完整的简短答案是:
话虽如此,默认情况下,Redis 会以周期性的时间间隔保留数据快照(显然这是每1分钟一次,但是我尚未验证这一点-以下文章对此进行了介绍,这是一个很好的基本介绍):
http://qnimate.com/redis-permanent-storage/
TL; DR
从官方文档:
- RDB持久性 [默认]以指定的时间间隔执行数据集的时间点快照。
- AOF持久性 [需要显式配置]记录服务器接收的每个写操作,这些操作将在服务器启动时再次播放,以重建原始数据集。
如果需要,必须为AOF持久性显式配置 Redis ,这将导致性能下降以及日志增长。对于有限数量的数据流的相对可靠的持久性可能就足够了。