Redis和对象版本控制

Redis和对象版本控制,redis,Redis,人们是如何应对redis对象模式的更改的?添加或删除对象的属性?对于非常简单的版本控制,可以使用不同的数据库编号。在两个版本之间几乎所有内容都相同的情况下,这可能是非常有限的,但如果它适合您,这也是一种非常干净的方法。分享我自己的经验(一年的项目,每秒有数千个用户请求) 通常,我有两种情况: 将新信息添加到现有结构中(如用户的“电子邮件”字段) 删除或更改现有结构中的现有值(例如,更改某些字段的格式) 从数据库中删除内容 对于1,我坚持以下简单策略:优雅地降级,例如,如果用户没有电子邮件记录-将

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

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

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

通常,我有两种情况:

  • 将新信息添加到现有结构中(如用户的“电子邮件”字段)
  • 删除或更改现有结构中的现有值(例如,更改某些字段的格式)
  • 从数据库中删除内容
  • 对于1,我坚持以下简单策略:优雅地降级,例如,如果用户没有电子邮件记录-将其视为空电子邮件。一直在工作

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

    PS:如果你在redis中影响了很多键,那么使用它可以节省很多时间是非常重要的

  • 获取管道中所有受影响(即您希望以任何方式修复它们)的密钥或记录的列表
  • 你想在他们身上做什么就做什么。如果可能的话,也尝试将写入管道的操作排队
  • 将排队操作发送到redis
  • 对你来说,为你的结构建立索引也是非常重要的。我用ID保存集合。然后,我只需在SMEMBERS上迭代(使用_id设置_)。
    这比在KEYS命令上迭代要好得多。

    很长一段时间以来都不鼓励使用数据库。将来(很快)将不支持它们。Redis群集不支持数据库-