多租户应用的 Redis 命名空间
Redis namespaces for multi-tenant apps
如何在多租户环境中使用 Redis 的单个实例。意味着多个不同的应用程序使用相同的 Redis 实例。
假设我有两个应用程序,一个是Baking App,另一个是Delivery App。两个应用程序将使用相同的 Redis 实例,并且两个应用程序将使用相似的密钥模式(例如 userid:uuid -> johnsmith
)保存相似的密钥等。显然,使用相同的 Redis 会发生冲突,有没有办法“命名空间”数据库本身即使是相同的键也会相互隔离,允许多个应用程序同时使用同一个 Redis 实例?
还可以使用 Redis 搜索,同样,搜索和索引将与每个应用程序隔离。因此,如果搜索是在 Delivery App 命名空间上进行的,它将不会从 Baking App 命名空间中获取任何内容。
如何实现?
所以您可以做很多事情:
- 您可以在按键前加上应用程序名称,例如 app1:userid:uuid 等
- 你可以使用redis提供的不同的内存数据库。 Redis 最多支持 16 个数据库。您可以将不同应用程序的密钥存储在不同的数据库中。要获取它们,请连接相应的数据库。
- 以上两种方法都可以使用
为了提高安全性,使应用程序无法访问其他应用程序的数据:
- 实施 Redis ACL - 如果您使用的是 Redis 版本 6+,则可以利用使用 ACL(访问控制列表)的功能。您可以为每个应用程序创建具有密码的用户,并在建立 Redis 连接时传递这些凭据。您甚至可以为用户添加 permissions/commands 等。
- 无法访问不同 DB 中的数据,即如果连接到 DB 0,则无法从 DB 1 获取数据。
如何在多租户环境中使用 Redis 的单个实例。意味着多个不同的应用程序使用相同的 Redis 实例。
假设我有两个应用程序,一个是Baking App,另一个是Delivery App。两个应用程序将使用相同的 Redis 实例,并且两个应用程序将使用相似的密钥模式(例如 userid:uuid -> johnsmith
)保存相似的密钥等。显然,使用相同的 Redis 会发生冲突,有没有办法“命名空间”数据库本身即使是相同的键也会相互隔离,允许多个应用程序同时使用同一个 Redis 实例?
还可以使用 Redis 搜索,同样,搜索和索引将与每个应用程序隔离。因此,如果搜索是在 Delivery App 命名空间上进行的,它将不会从 Baking App 命名空间中获取任何内容。
如何实现?
所以您可以做很多事情:
- 您可以在按键前加上应用程序名称,例如 app1:userid:uuid 等
- 你可以使用redis提供的不同的内存数据库。 Redis 最多支持 16 个数据库。您可以将不同应用程序的密钥存储在不同的数据库中。要获取它们,请连接相应的数据库。
- 以上两种方法都可以使用
为了提高安全性,使应用程序无法访问其他应用程序的数据:
- 实施 Redis ACL - 如果您使用的是 Redis 版本 6+,则可以利用使用 ACL(访问控制列表)的功能。您可以为每个应用程序创建具有密码的用户,并在建立 Redis 连接时传递这些凭据。您甚至可以为用户添加 permissions/commands 等。
- 无法访问不同 DB 中的数据,即如果连接到 DB 0,则无法从 DB 1 获取数据。