使用redis或mongodb存储用户信息

时间:2018-10-28 05:20:38

标签: python mongodb redis

我需要在类似json的对象中存储一些用户和文档状态信息。例如:

{
    "name": "Henry",
    "company": "Disney",
    "is_recommended": true,
    "plan_type" "free",
    etc.
}

当用户登录或更改任何用户信息时,将从数据库中获取此信息并将其存储在会话的内存中。

我对Redis有一定的经验,我对使用它感到很满意,但是我想知道是否可以在redis中完成以上操作而不会遇到太多麻烦。例如,以下是一些我需要运行的查询:

update items set plan_type="Paid" where company = "Disney";

您认为在redis中可以执行上述操作吗?还是我应该尝试使用其他方法(我认为是mongodb)来完成上述操作?

99%的使用量将用于读取数据,但是1%的使用量将以批量方式更新数据,并且需要立即完成。

六年前,有人问过类似的问题-What's the most efficient document-oriented database engine to store thousands of medium sized documents?-但我确信自那时以来,redis和mongodb都发生了很大变化……

1 个答案:

答案 0 :(得分:1)

您可以使用SETLIST company 字段建立二级索引:

SADD company:Disney userid1
SADD company:Disney userid2
SADD company:OtherCompany userid3

当您需要更新数据时,请执行以下步骤:

  1. 搜索公司索引以获取用户ID:SMEMBERS company:Disney
  2. 搜索用户索引以获取用户属性:对于每个用户,请执行以下操作:GET userid
  3. 更新属性
  4. 更新用户索引:对每个用户执行:SET userid new-attributes

这是实现目标的内置方法,需要更多的工作,并且有点复杂。

但是,正如注释中提到的@Not_a_Golfer一样,Redis有一个名为RediSearch的模块可以为您完成工作。如果您使用的是Redis 4.0或更高版本,则可以尝试。