【问题标题】:Redis - handling changes to data structuresRedis - 处理数据结构的更改
【发布时间】:2011-06-04 03:11:29
【问题描述】:

我一直在试验 Redis,我非常喜欢它带来的可扩展性。但是,我想知道如何处理对已经投入生产的系统的数据结构的更改。

例如,假设我正在收集有关用户的信息,并且使用 user_id 作为键,并将有关用户的其他数据转储为逗号分隔值。

user_id: name, email, etc.

现在,假设在大约 100,000 条记录之后,我意识到我需要通过 email 进行查询 - 我现在如何拍摄现有数据的快照并为其创建新索引?

【问题讨论】:

    标签: redis key-value-store


    【解决方案1】:

    根据我对 Redis 的理解,这将需要一些 Redis 不适合做的事情。您必须遍历所有记录(使用键 *),然后更改数据的顺序并创建一个新键。我个人建议使用列表而不是逗号分隔的字符串。在列表中,您可以从 redis 内部对其进行重新排序。 Redis 列表如下所示:

    "Colum" => [0] c.mcgaley@gmail.com
                [1] password
                [2] Something
    

    我正在构建一个遇到同样问题的应用程序。我通过列出所有用户信息的列表来解决这个问题,然后使用用户的电子邮件作为密钥,其中包含用户 ID 的值。所以我的数据库会是这样的:

    "Colum" => [0] c.mcgaley@gmail.com
                [1] password
                [2] Something
    "c.mcgaley@gmail.com" => "Colum"
    

    所以我可以查询 ID 或电子邮件,仍然可以获得我需要的信息。

    很抱歉,我无法直接回答您的问题。只是希望这会有所帮助。

    【讨论】:

    • 是的,谢谢,使用列表似乎是这里的黄金法则。任何形式的 CSV 都会使未来的更改变得非常困难。
    • 很高兴我能帮上忙。当我开始使用 Redis 时,我也发现了这一点
    【解决方案2】:

    如果您想支持更改,则使用 csv 不是一个好主意。如果所有内容都在一个键中,您需要使用序列化程序来处理丢失/新值,或者您可以使用 redis 哈希,它为您提供命名子键。无论哪种方式,您都可以添加/删除字段,唯一的要求是您的代码知道在读取没有新值的记录时该怎么做。

    要允许通过电子邮件查找,您需要添加一个索引 - 基本上是每个电子邮件的键(或列表),以用户 ID 作为值。您需要通过一次获取所有键来填充此索引,然后确保在电子邮件更改时更新它。

    您可以遍历所有键并使用不同的 id 存储它们,但这可能比它的价值更麻烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      相关资源
      最近更新 更多