在Redis中存储用户信息的最佳做法
我正在构建一个简单的web应用程序,登录时需要在其中存储用户信息 我需要存储的信息是在Redis中存储用户信息的最佳做法,redis,Redis,我正在构建一个简单的web应用程序,登录时需要在其中存储用户信息 我需要存储的信息是json格式,如: User:{'name':'John',角色:[1,2,3]} 我在考虑使用user+{user_id}之类的组合来存储信息: User_1:{'name':'John',roles=[1,2,3]} 我需要知道这是否是一种好的做法(快速检索信息时思考),或者是否有其他选择。选项1: 使用key:valuepair "User_1": "name: John, r
json
格式,如:
User:{'name':'John',角色:[1,2,3]}
我在考虑使用user+{user_id}之类的组合来存储信息:
User_1:{'name':'John',roles=[1,2,3]}
我需要知道这是否是一种好的做法(快速检索信息时思考),或者是否有其他选择。选项1: 使用
key:value
pair
"User_1": "name: John, roles=[1,2,3]"
时间复杂性:O(1)
[x] 但从Redis获取数据后,您必须再次解析它
选项2:
对名称
和角色
使用单独的键
"User_1_name": "John",
"User_1_roles": [1,2,3]
时间复杂性:O(1)
每个请求。总的来说,对于你的例子来说,它是常数
[x] 同一用户的额外呼叫
选项3:
使用散列
user_1: {
"name": "John",
"roles": [1, 2, 3]
}
时间复杂性:O(N)
。其中N
是散列中的字段数。但对于你的例子来说,它是常数
在我看来,使用散列将是最好的选择。选项1: 使用
key:value
pair
"User_1": "name: John, roles=[1,2,3]"
时间复杂性:O(1)
[x] 但从Redis获取数据后,您必须再次解析它
选项2:
对名称
和角色
使用单独的键
"User_1_name": "John",
"User_1_roles": [1,2,3]
时间复杂性:O(1)
每个请求。总的来说,对于你的例子来说,它是常数
[x] 同一用户的额外呼叫
选项3:
使用散列
user_1: {
"name": "John",
"roles": [1, 2, 3]
}
时间复杂性:O(N)
。其中N
是散列中的字段数。但对于你的例子来说,它是常数
在我看来,使用散列将是最好的选择。我想你的问题是关于键,而不是值 最好使用
user+id
键保存用户。
如果您的用户有另一个标识属性(例如电子邮件),则需要将所有用户映射到他们的电子邮件
因此,每个用户在Redis中都有这些密钥:
User_1
:{'name':'John',角色:[1,2,3],'email':'blabla@test.com“}
用户_blabla@test.com_id
:1
当您需要通过电子邮件查找用户时,您可以通过阅读
用户来获取用户id_blabla@test.com_id
(它的值等于用户的id 1),然后获取用户\u 1
我想你的问题是关于键,而不是值
最好使用user+id
键保存用户。
如果您的用户有另一个标识属性(例如电子邮件),则需要将所有用户映射到他们的电子邮件
因此,每个用户在Redis中都有这些密钥:
User_1
:{'name':'John',角色:[1,2,3],'email':'blabla@test.com“}
用户_blabla@test.com_id
:1
当您需要通过电子邮件查找用户时,您可以通过阅读用户来获取用户id_blabla@test.com_id
(其值等于用户的id 1),然后获取用户\u 1