我需要在类似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都发生了很大变化……
答案 0 :(得分:1)
您可以使用SET
或LIST
为 company 字段建立二级索引:
SADD company:Disney userid1
SADD company:Disney userid2
SADD company:OtherCompany userid3
当您需要更新数据时,请执行以下步骤:
SMEMBERS company:Disney
GET userid
SET userid new-attributes
这是实现目标的内置方法,需要更多的工作,并且有点复杂。
但是,正如注释中提到的@Not_a_Golfer一样,Redis有一个名为RediSearch的模块可以为您完成工作。如果您使用的是Redis 4.0或更高版本,则可以尝试。