在没有AOF的情况下,是否有可能在崩溃后保持Redis集合的一致性?



对Redis来说有点新。

假设设置/情况:假设Redis每10分钟做一次快照。AOF关闭。您有一个名为"posts"的集合,用于保存帖子的id。您还可以使用MySQL表保存帖子的id。

  1. MySQL和Redis共有2个post id
  2. Redis做快照
  3. 用户创建新的post -现在Redis有3个id, MySQL也是如此
  4. 但是随后Redis崩溃或被杀死
  5. 重新启动后,Redis现在有2个id,而MySQL有3个

你是如何意识到Redis数据不一致的?据我所知,AOF引入了更多的问题,并不完美。是否有更简单/更优雅的方法来保持集合的一致性?

这里有多少数据?如果它不是很多,你可以有一个进程,简单地重新加载所有的数据在Redis从你的MySQL数据库。好处是,你可以把所有的数据从10分钟的备份存储中加载到Redis中,然后简单地在Redis中逐个键覆盖所有的数据。如果它已经存在,那么很好,如果没有,那么它会添加它。

不幸的是,如果没有一些主要的工作来构建两个系统之间的并发性,您将永远无法保持它们的一致性。AOF没那么糟糕。你应该试一试。即使这样,你也不得不担心一致性。

我有一些成功的解决方案是使用在另一台服务器上运行的从实例。与从服务器的同步不会阻塞,因此如果主服务器崩溃,您仍然有可能丢失最后一条命令,但在实践中这种情况不太可能发生。您也可以有多个从服务器以实现冗余。

结果是您的主服务器不再使用任何磁盘I/O,并且没有额外的内存用于快照所使用的进程fork。当主服务器出现故障时,您可以通过将其中一个从服务器暂时变为主服务器(使用我最喜欢的redis命令:SLAVEOF NO ONE)来恢复数据,让您的主服务器从临时服务器中恢复,然后在同步完成后将主/从服务器角色恢复到原始配置。

最新更新