Redis中的多租户为node.js

我们有一个多租户NodeJS应用程序,现在我们正在为我们的一些数据添加一个caching层。

我们的目标是使用Redis 包中的 Rediscaching,我们正在努力检查我们支持多租户的选项,主要考虑两点:

  1. 保护数据。
  2. 清除租户级别的旧数据。

我们目前的调查结果是,我们可以为每个租户使用单独的Redis实例 – 这对我们来说不是一个好的解决scheme。

我们发现的另一个select是使用“tenant_id:”前缀命名空间。 这个选项解决了第一点 – 数据现在是安全的,但我们仍然有第二点要解决。

我们的使用案例是,一个租户可以投入大量的数据来填充caching并推出其他租户的数据。 我们希望在租户级别定义我们的LRU,也就是说,当新数据添加到caching时,它只会驱逐同一租户最近使用的最后一个数据。

有什么build议么?

尽pipe使用逻辑/编号/共享数据库的选项当然存在,但您应该避免这样做。 您的数据库不仅会共享相同的configuration,因为Redis是单线程的,每个租户都将(可能)干扰其他人的操作,并且(最坏的情况下)阻止他们。

你应该做的是为每个租户使用专用的 Redis进程。 好消息是Redis是相当轻量级的,所以在资源方面每个实例的开销很小。 稍好一点的是,这种方法会使pipe理变得更加复杂。

如果您希望避免pipe理员的痛苦,我build议您研究使用托pipe的Redis产品的选项。 根据您的提供者,有些允许创build多个专用实例,无需额外成本。

免责声明:我在Redis的Redis实验室工作,提供解决scheme,包括托pipe的Redis,其行为与我上面描述的一样(为了确切的目的)。

你有没有调查每个租户使用单独的Redis逻辑数据库?

您可以使用SELECT命令切换活动数据库,或者在连接到Redis实例时select要使用的数据库(database-id):

redis://user:password@host:port/database-id

例如:

redis://user:password@localhost:6379/1

连接到逻辑数据库1。