当前位置: 首页 > 知识库问答 >
问题:

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

金子平
2023-03-14

我想在redis中存储用户的配置文件,因为我必须经常阅读多个用户的配置文件…目前我看到的选项有两个:

选项1:-为每个用户的配置文件存储单独的哈希键

    null
  • [哈希]-用户-配置文件u1{ID:u1,名称:user1,电子邮件:user1@domain.com,照片:URL}
  • [哈希]-用户-配置文件u2{ID:u2,名称:user2,电子邮件:user2@domain.com,照片:URL}
  • 在users-profile散列键、用户的ids字段和JSON序列化的profile对象的值中。

请告诉我哪种选择是最好的考虑以下:

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

共有1个答案

慕容雅珺
2023-03-14

正如Sergio Tulentsev所指出的,不管用什么方法将用户的所有数据(特别是如果数据集很大的话)存储在一个散列中都是不好的。

如果您正在寻找内存优化,就像这篇博客文章中指出的那样,将用户数据存储为单个键也不是首选

使用分页机制读取用户的数据需要使用数据库,而不是像Redis这样的简单缓存系统。因此,建议使用mongoDB这样的NoSQL数据库。

因此,最好的解决方案是在redis中缓存最活跃用户的数据,以消除数据库提取开销。

我建议你调查一下海象。

它基本上遵循以下模式:

@cache.cached(timeout=expiry_in_secs)
def function_name(param1, param2, ...., param_n):
    # perform database fetch
    # return user data
from walrus import *
db = Database(host='localhost', port=6379, db=0)

希望这有帮助。

 类似资料:
  • 问题内容: 我试图在一个明确的列表中回答两个问题: Redis的底层数据结构是什么? 每种类型的主要优点/缺点/用例是什么? 因此,我读过Redis列表实际上是用链接列表实现的。但是对于其他类型,我无法提取任何信息。同样,如果有人偶然发现了这个问题,而又对修改或访问不同数据结构的优缺点没有一个高层次的总结,那么他们将有完整的清单,列出 何时可以最佳地使用特定类型 进行引用。 具体来说,我希望概述所

  • 主要内容:图存储结构基本常识,图存储结构的分类我们知道,数据之间的关系有 3 种,分别是 "一对一"、"一对多" 和 "多对多",前两种关系的数据可分别用 线性表和树结构存储,本节学习存储具有"多对多"逻辑关系数据的结构—— 图存储结构。 图 1 图存储结构示意图 图 1 所示为存储 V1、V2、V3、V4 的图结构,从图中可以清楚的看出数据之间具有的"多对多"关系。例如,V1 与 V4 和 V2 建立着联系,V4 与 V1 和 V3 建立着

  • 主要内容:树的结点,子树和空树,结点的度和层次,有序树和无序树,森林,树的表示方法,总结之前介绍的所有的 数据结构都是 线性存储结构。本章所介绍的树结构是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合。                                                                          (A)                                                          

  • 前面学习 数据结构的过程中,总是使用数组作为 顺序表的底层实现,给我们一种 "数据结构中,数组的作用就是实现顺序表" 的错误认识。其实,数组的作用远不止于此。 本节将从数据结构的角度讲解 数组存储结构。 本节所讲的数组,要将其视为一种存储结构,与平时使用的数组基本数据类型区分开。 一说起数组,我们的印象中数组往往是某一门编程语言中包含的具体数据类型,其实不然。 从本质上讲,数组与顺序表、 链表、

  • 为了保存数据,我将使用一个SET操作,即: 然后,为了更新数据,我将使用两个操作(GET+SET),即: 选项2:单值多键 我对方案1的赞成/反对意见 备选方案1优点: 更好的数据库组织,因为每个用户只有一个密钥 通过一个GET操作,我将拥有所有JSON数据 要更新所有JSON字段,我将只使用两个操作(GET+SET) 数据库的文件大小将更小 null 如果希望并发修改JSON负载(非原子读取-修

  • 我有Nexus服务器和团队内共享的maven用户设置,其中包含 这就是pom中定义的所有存储库。xml(包括默认的Maven Central)由Nexus提供。 在Nexus中,新的存储库被添加到公共组中。 问:有更好的方法吗?目前其他开发人员不理解Nexus Maven的交互,当pom.xml中定义了新的存储库(不是由Nexus代理的)时,maven只会说“无法获取工件”。但不是“配置你的Nex