gpt4 book ai didi

redis结构、性能

转载 作者:IT王子 更新时间:2023-10-29 05:56:35 29 4
gpt4 key购买 nike

我是 Redis 的新手,我有一个包含数百万个成员(member) ID、电子邮件和用户名的数据集,并且正在考虑将它们存储在例如列表结构中。我认为 listsorted set 可能最适合我的情况。

现在,我正在使用用户名的第一个字母索引到一个列表并将数据推送到后面的列表:rpush list:name:a username,member_id。但是,由于列表没有排序,在几百万条目中检索某条记录会很慢吗?

在这种情况下,有序集(因为它是有序的)会比列表更好吗?或者,您有任何其他提高性能的建议吗?

访问记录的key应该是username和email。

最佳答案

通过任何不靠近前端或末尾的索引访问列表的代价很高,成本为 O(N)。对于大型列表,这不是很有效。

使用哈希可能更适合您的需求。这将使用比列表更多的内存,但将提供接近 O(1) 的访问。

redis 中的哈希是可以包含任意字段和值的命名键。

您可以将整个用户记录存储在单个 redis 哈希中,使用 member_id 命名(希望这是一个短值)。如果保证每个用户的 member_id 是唯一的,下面是如何使用 member_id 42 为用户填充哈希。

hset user:42 email foo@example.com
hset user:42 username foobar
hset user:42 logincount 0

这里的redis“key name”是“user:42”。每个用户将获得一个键,类似于 SQL 数据库中的单行,但更灵活。然后您可以更新两个辅助哈希:一个将用户名映射到 member_id,另一个将电子邮件地址映射到 member_id。这假设您在 member_id、用户名和电子邮件地址之间具有 1:1 的关系。

hset username_to_id foobar 42
hset email_to_id foo@example.com 42

当您需要查找特定用户的电子邮件地址时,首先从 email_to_id 哈希中查找 member_id,然后从哈希中检索 email 字段at key user:member_id 同样,您可以从用户名开始,在 username_to_id 哈希中查找 member_id,然后获取存储在用户中的用户记录:member_id 散列。

这是一个在给定电子邮件地址的情况下查找用户名的示例:

redis> hget email_to_id foo@example.com
"42"
redis> hget user:42 username
"foobar"
redis>

您可以通过向“user:”散列添加更多字段来向用户添加更多记录。如果您想增加登录计数器,这也很简单:

redis> hincrby user:42 login_count 1
(integer) 1
redis> hgetall user:42
1. "email"
2. "foo@example.com"
3. "username"
4. "foobar"
5. "login_count"
6. "1"
redis>

你可以找到more information about hashes在 redis.io 网站上。

关于redis结构、性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5661583/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com