Redis和对象版本控制

时间:2011-04-06 11:05:13

标签: redis

人们如何应对redis对象模式的更改 - 在对象中添加或删除属性?

2 个答案:

答案 0 :(得分:3)

根据我自己的经验分享(一年的项目,每秒有数千个用户请求)。

通常,我有两种情况:

  1. 向现有结构添加新信息(例如,“电子邮件”字段给用户)
  2. 删除或更改现有结构中的现有值(例如,更改某些字段的格式)
  3. 从数据库中删除内容
  4. 对于1,我一直遵循简单的策略:正常降级,例如如果用户没有电子邮件记录 - 将其视为空电子邮件。一直都在工作。

    对于2和3,取决于是否可以在发布之前或之后更改/计算/修复数据。我在数据库上运行一项工作,为我完成所有工作,几百万个密钥需要相当长的时间(分钟)。如果只有在我发布新代码之后才能运行该作业 - 那么优雅地降级会有很大帮助,我只需发布然后运行该作业。

    PS:如果你在redis中影响了很多键,那么使用http://redis.io/topics/pipelining非常重要。节省大量时间。

    1. 列出所有受影响的(即您想以任何方式修复它们)键或管道中的记录
    2. 做任何你想做的事。如果有可能尝试将写入操作排入管道
    3. 将排队的操作发送到redis。
    4. 为您的结构制作索引也非常重要。我保留有ID的集合。然后我简单地遍历SMEMBERS(set_with_ids)。 它比迭代KEYS命令要好得多。

答案 1 :(得分:0)

对于极其简单的版本控制,您可以使用不同的数据库编号。在两个版本之间几乎所有东西都相同的情况下,这可能是非常有限的,但如果它适合你,它也是一种非常干净的方式。