2

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

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

user_id: name, email, etc.

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

4

2 回答 2

1

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

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

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

于 2011-01-06T03:28:12.593 回答
0

根据我对 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 或电子邮件,仍然可以获得我需要的信息。

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

于 2011-01-05T21:34:42.080 回答