在redis中存储用户配置文件的更好的数据结构是什么?

Suy*_*ale 5 paging hash json redis

我想将用户的个人资料存储在redis中,因为我必须经常阅读多个用户的个人资料..我目前看到两种选择:

选项1: - 按用户的个人资料存储单独的哈希密钥

  • [hash] - u1 profile {id:u1,name:user1,email:user1@domain.com,photo:url}
  • [hash] - u2 profile {id:u2,name:user2,email:user2 @ domain.com,photo:url}
  • 其中每个用户的id是散列键和配置文件字段以及值JSON序列化的配置文件对象.(或者代替json用户字段 - 值对)

选项2: - 使用单个哈希密钥存储所有用户配置文件

  • [hash] - users-profile u1 {id:u1,name:user1,email:user1@domain.com,photo:url}
  • [hash] - users-profile u2 {id:u2,name:user2,email:user2 @domain.com,photo:url}
  • 在users-profile散列键,用户的id字段和值JSON序列化的配置文件对象中的位置.

请告诉我哪个选项最好考虑以下内容:

  1. 性能
  2. 内存利用率
  3. 读取多个用户的配置文件 - 对于批处理我应该能够读取1-100,101-200用户的个人资料
  4. 更大的数据集 - 如果有数百万用户配置文件怎么办?

r.p*_*osa 1

选项1。

  • 性能:通常这取决于您的用例,但假设您想读取特定用户(登录/注销、授权目的等)。使用选项#1,您只需计算用户哈希值并获取用户配置文件。使用选项 #2,您将需要获取所有用户配置文件并解析 json(尽管您可以使其高效,但它永远不会像选项 #1 那样高效和简单);

  • 内存利用率:您可以使选项 #1 和选项 #2 在 redis 中采用相同的大小(在选项 #1 上,您可以避免将哈希/用户 ID 存储为 json 的一部分)。但是,选择相同的示例来加载特定用户,您只需要在代码/内存中使用单个用户配置文件 json,而不是包含一组用户配置文件的更大 json

  • 读取多个用户的配置文件 - 对于批处理,我应该能够一次读取 1-100、101-200 个用户的配置文件:为此,正如通常使用关系数据库完成的那样,您需要进行分页。使用 Redis 进行分页的方法有多种,但使用扫描操作是迭代一组用户的简单方法

  • 更大的数据集 - 如果有数百万用户的个人资料怎么办

Redis 是一个内存中但持久在磁盘上的数据库,因此它代表了一种不同的权衡,即在数据集不能大于内存的限制下实现非常高的写入和读取速度

如果您“无法拥有更大内存的数据集”,您可以按照Redis FAQ 的建议进行分区。在 Redis 常见问题解答中,您还可以检查其他指标,例如“单个 Redis 实例可以容纳的最大键数”或“Redis 内存占用量”