Redis – 嵌套哈希与字符串值
Redis – Nested hashes vs. string values
我需要使用 Redis 缓存访问权限。
访问权限是针对每个用户(应用程序的用户)、功能(用户可以执行的操作)和机器(用户可以执行该功能的机器)。
例如:
UserA,编辑名称,machine1
或者UserB,删除机器,machine40
该应用程序包含大约 1000 个功能、6000 台机器和 300 个用户。
我不确定存储访问权限的最佳想法是什么。
选项 1:
将访问权限存储为单个字符串,如下所示:
redis> set userA_EditName_machine1 true
redis> set userA_EditName_machine2 false
redis> set userB_DeleteMachine_machine40 false
选项 2:
将访问权限存储为嵌套哈希:
redis> hset users:userA:EditName machine1 true
redis> hset users:userA:EditName machine2 false
redis> hset users:userB:DeleteMachine machine40 false
我的应用程序是 ASP.Net MVC 应用程序,我正在使用 StackExcahnge.Redis 与 Redis 一起工作。
一种选择比另一种有什么优势吗?
编辑:
应用程序需要检查是否允许用户在特定机器上执行特定操作。
查询将如下所示:
选项 1:
redis> get user0_function0_machine1
选项 2:
redis> hget users:user0:function0 machine1
您应该考虑将访问控制列表(附加到用户计算机的权限列表)存储为 redis 哈希。
通过这种方式,您可以查询一个主题的整个权限集合,或者只查询一个特定的对象权限。
例如,您有以下用户(主题):
- 约翰:机器 1
- 约翰:机器 2
- 玛丽:机器 1
以下特征(或对象):
- 编辑姓名
- 删除机器
以及以下权限:
- Y(已授予访问权限)
- N(拒绝访问)
您可以使用 key -> field -> value 为每个主题创建一个散列,如下所示:
ACL:{username}:{machine} -> {object} -> {permission}
因此您可以像这样查询特定对象的权限:
redis> HGET ACL:john:machine2 editname
"Y"
或者查询一个主题的整个权限集合:
redis> HGETALL ACL:john:machine2
1) "editname"
2) "Y"
3) "deletemachine"
4) "N"
当然你也可以选择只存储授予的权限,默认为拒绝的权限。
我需要使用 Redis 缓存访问权限。
访问权限是针对每个用户(应用程序的用户)、功能(用户可以执行的操作)和机器(用户可以执行该功能的机器)。
例如:
UserA,编辑名称,machine1
或者UserB,删除机器,machine40
该应用程序包含大约 1000 个功能、6000 台机器和 300 个用户。
我不确定存储访问权限的最佳想法是什么。
选项 1: 将访问权限存储为单个字符串,如下所示:
redis> set userA_EditName_machine1 true
redis> set userA_EditName_machine2 false
redis> set userB_DeleteMachine_machine40 false
选项 2: 将访问权限存储为嵌套哈希:
redis> hset users:userA:EditName machine1 true
redis> hset users:userA:EditName machine2 false
redis> hset users:userB:DeleteMachine machine40 false
我的应用程序是 ASP.Net MVC 应用程序,我正在使用 StackExcahnge.Redis 与 Redis 一起工作。
一种选择比另一种有什么优势吗?
编辑:
应用程序需要检查是否允许用户在特定机器上执行特定操作。 查询将如下所示:
选项 1:
redis> get user0_function0_machine1
选项 2:
redis> hget users:user0:function0 machine1
您应该考虑将访问控制列表(附加到用户计算机的权限列表)存储为 redis 哈希。
通过这种方式,您可以查询一个主题的整个权限集合,或者只查询一个特定的对象权限。
例如,您有以下用户(主题):
- 约翰:机器 1
- 约翰:机器 2
- 玛丽:机器 1
以下特征(或对象):
- 编辑姓名
- 删除机器
以及以下权限:
- Y(已授予访问权限)
- N(拒绝访问)
您可以使用 key -> field -> value 为每个主题创建一个散列,如下所示:
ACL:{username}:{machine} -> {object} -> {permission}
因此您可以像这样查询特定对象的权限:
redis> HGET ACL:john:machine2 editname
"Y"
或者查询一个主题的整个权限集合:
redis> HGETALL ACL:john:machine2
1) "editname"
2) "Y"
3) "deletemachine"
4) "N"
当然你也可以选择只存储授予的权限,默认为拒绝的权限。