【问题标题】:Redis replication for same variable相同变量的 Redis 复制
【发布时间】:2019-07-03 00:26:31
【问题描述】:

假设我有一个在 Master 中经常更改的变量

set foo 1
set foo 5
set foo 4
set foo 8
set foo 4
set foo 10
set foo 7
...

如果网络出现故障,并且执行了更多类似的命令,当网络启动时,副本会被所有这些命令淹没,还是只会接收每个不同变量的最后一个?

提前致谢

【问题讨论】:

  • 每个不同的变量是什么? ...
  • 我的意思是像“foo1”这样的变量; “foo2”等。在我的示例中,我只使用了一个:“foo”。
  • 尝试提供正确的示例和您的预期输出。
  • 我已经提供了示例,但我没有任何预期的输出。这是一个问题,以防有人知道答案。

标签: redis replication general-network-error


【解决方案1】:

当您使用 Redis 复制时,它允许从 Redis 实例成为主实例的精确副本。根据 Redis 文档,主要有 3 种机制:

  • 主服务器向从服务器发送命令流,以在主服务器端复制数据集。
  • 当链路(主从之间)中断时,由于网络问题或因为在主或从中检测到超时,然后从重新连接并尝试继续进行部分重新同步:这意味着它将尝试只需在断开连接期间获取部分丢失的流即可。
  • 如果无法进行部分重新同步,从站将请求完全重新同步,这意味着主站需要创建其所有数据的快照,将其发送给从站,然后随着数据集的变化继续发送命令流.

欲了解更多信息,请参阅here

希望这会找到你。

【讨论】:

  • 你好,Shudipta,我想了解第二种方法。想象一下,我有一个每秒更新数百次的变量“foo”。如果网络中断 10 分钟,则需要传输 6.000 次更新。当网络恢复时,Redis 是否会发送带有相同变量的 6.000 次更新的流,或者它是否足够聪明地检测到它是同一个变量,并且只发送最后一个命令?正如我在示例中所写,对于变量“foo”: set foo 1 set foo 5 set foo 4 ... [6000 times] set foo 20 它不应该只发送最后一个:“set foo 20”吗?路易斯
  • 答案应该在上面提供的答案部分中明确。你有从属的主节点。因此,当网络发生故障时,即使它们之间无法通信,它们也会在重新加入集群时更新流。答案部分已对此进行了解释。您可以通过redis.io/topics/replication了解更多信息。
  • 不,我的问题没有答案。这就是我在这里问的原因,以防有人知道。如果所有更改都只针对一个变量,是否会发送包含对该变量的所有更改的完整流,或者 Redis 足够聪明,只发送最后一次更新?我可以想象实现它,它并不复杂,并且对同步进行了很好的优化。我猜这是开发商的问题。这里似乎没有人知道答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 2019-02-11
  • 1970-01-01
  • 2018-06-29
  • 2021-05-18
  • 1970-01-01
  • 2020-09-03
相关资源
最近更新 更多