我需要将一些用户和文档状态信息存储在一个类似 json 的对象中。例如:
{
"name": "Henry",
"company": "Disney",
"is_recommended": true,
"plan_type" "free",
etc.
}
当用户登录或更改任何用户信息时,此信息从数据库中获取并存储在 session 中的内存中。
我有一些使用 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 都发生了很大变化......
最佳答案
您可以使用SET
或LIST
为company 字段构建二级索引:
SADD company:Disney userid1
SADD company:Disney userid2
SADD company:OtherCompany userid3
当您需要更新数据时,执行以下步骤:
- 搜索公司索引以获取用户 ID:
SMEMBERS company:Disney
- 搜索用户索引以获取用户属性:为每个用户执行:
GET userid
- 更新属性
- 更新用户索引:为每个用户执行:
SET userid new-attributes
这是实现目标的内置方法,它需要更多的工作,而且有点复杂。
然而,正如@Not_a_Golfer 在评论中提到的,Redis 有一个名为 RediSearch 的模块。为您完成工作。如果你玩的是Redis 4.0以上的,可以试试。
关于python - 用redis或者mongodb存储用户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53028596/