database-design - Redis ACL架构

标签 database-design architecture redis

我想使用redis来检查用户是否有网站上某些位置的权限。

该网站允许用户创建功能有限的群组。本质上有两种类型的用户(可能更多)——管理员和读者。一个用户可以参加不同的群组(10-15个群组)

第一个想法 - 为每个用户创建 redis 哈希,并包括他们作为管理员的组和他们作为读者的组。然后,我可以通过在注销时删除记录并在登录和更改时设置权限来控制这些。哈希值也可能过期。

第二个想法 - 为每个组创建哈希并存储管理员成员和读者成员。这样做的好处是群组的数量可能会少于成员,而且我也可以获取群组的详细信息。

所以我的两个问题是 -

哪种方法在架构方面更好?

我是否应该使用哈希(因为我最终会得到类似于 group:1 admins [13,52,12,43] 的数组,其中数组保存用户 ID 或我应该使用其他东西来快速提取用户ID而不必解析数组然后每次都循环它吗?

最佳答案

我想建议一种稍微不同的方法,IMO 更适合用例。

我假设您的每个用户都有一个唯一的标识符。让我们同意您使用的是普通旧号码(或者您有一个将用户 ID 映射到普通旧号码的查找表)。从现在开始,用户将被称为 0(第一个用户)、1(第二个用户)等等...

我还假设用户总数远远超过系统中潜在组的数量。换句话说,您将拥有数百万用户,但只有数十个组(或多或少)。

看来您想要的是,给定一个用户(数字),找到她/他所属的组(有限的小集合)。

您听说过 BITMAP是?您可以拥有一个位图,其中位索引代表用户 ID,0 表示用户不在组中,1 表示归属。如果您需要更多详细信息,请LMK,或者如果有意义,请将其标记为答案。

关于database-design - Redis ACL架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45215294/

相关文章:

mysql - 在数据库中存储动态字段的最佳实践

mysql - 基础数据库设计场景

sql - NULL 与 FK 关系的含义是什么/应该是什么 - 数据库

mysql - 不定数量的表与不定数量的多列行

使用 LinqToSql 的 Winforms 应用程序架构

Laravel horizo​​n supervisor 在 horizo​​n::terminate with forge daemon running 后不会重启

redis -/var/run/redis/redis.pid 存在,进程已经运行或崩溃

database-design - 设计一个高性能的酒店房间预订系统

json - Apache spark 存储和查询 json 数据是一个很好的用例吗?

redis - 删除Redis中的多个键