Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Redis中存储用户信息的最佳做法_Redis - Fatal编程技术网

在Redis中存储用户信息的最佳做法

在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

我正在构建一个简单的web应用程序,登录时需要在其中存储用户信息

我需要存储的信息是
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