【发布时间】:2015-09-08 13:37:22
【问题描述】:
我在某个命名空间中有大量 Redis 键/值对(即键有一些前缀)。此集合的来源会定期更新;它大多保持不变,但添加了一些键,删除了一些键,还有一些更新了值。
什么是更新 Redis 中的集合而不会使使用该集合的应用程序停机的有效方法?更新不需要是原子的。
【问题讨论】:
-
只在后台执行数据同步有什么问题?
-
@SergioTulentsev 通过“数据同步”,这听起来像是在暗示您了解集合的新旧版本之间的差异。我添加了这种方法作为答案。它需要遍历整个新旧集合。由于更新后旧集合无关紧要,我想知道是否有更好的方法。
-
或者,您可以将新集合上传到新前缀(“mycollection:v0034:*”)。上传完成后,切换应用程序以使用新前缀并从旧前缀中删除现已过时的键
-
您可以在不计算增量的情况下进行数据同步:只需获取您的新集合并推送具有大致等于
time between syncs + duration of data sync的 TTL 值。这将处理新的和更新的密钥。并且已删除的密钥将在过期时自行删除(下一次同步后不久)。 -
@SergioTulentsev 使用 TTL 很聪明,听起来很方便,但如果出现问题,可能很难变得健壮。这就像在您的旧宇宙飞船上启动自毁序列,然后继续构建改进的模型。如果一切按计划进行,它会实现干净的过渡。 :-)
标签: redis