redis 如何分离运行在同一台服务器上的多个用户实例?

时间:2021-06-28 10:24:54

标签: redis

我对 Redis 的困惑

如果我在我的服务器上安装 Redis 并且我的4个不同的客户端连接到那个同一个 redis服务器,那么它们之间的数据将如何保持分开客户端不会覆盖其他客户端保存的键值对。

例如:-

client-1 set name="adam"

client-2 set name="henry"

因此,由于 Redis 服务器在这些客户端之间通用,client-1 设置的名称键将被 client-2覆盖,所以当 client-1 执行 get name ==> henry(因为已经更新错了,他以为是 adam)

那么Redis是如何分离运行在同一台服务器上的多个用户实例的呢?它是在内部创建单独的数据库还是根据用户或其他内容创建单独的数据库?

2 个答案:

答案 0 :(得分:4)

Redis 本身不会分离您的数据。你必须自己把它们分开。有很多选择可以做到这一点。

  1. 使用Redis数据库:Redis支持多个数据库。每个应用程序(在您的情况下,客户端)可以设置/分配用于使用一个特定的数据库。这种分配必须在应用端完成,而不是在Redis中。

    这种方法的局限性是:i) Redis 最多支持 16 个数据库(从 0 到 15)。 ii) Redis 集群模式只支持一个数据库。

    注意:SELECT 命令用于选择特定的数据库。

  2. Namespacing:每个应用程序都可以(例如)分配一个唯一的前缀。他们会用分配的前缀为所有键添加前缀。

  3. 为每个应用程序使用单独的 Redis 实例。

答案 1 :(得分:2)

由于您拥有键值对并且您对多个客户端使用相同的键,因此您需要区分您的客户端。这样做的一种方法是将您的客户端的标识符添加到每个密钥之前。因此,除了set name,您还可以执行set client1_name 之类的操作。您最好在应用程序中实现一些函数,这些函数将被调用,如 setNamegetName,它会将客户端标识符添加到引擎盖下的名称中。因此,您只需实现一次辅助函数,即可确保它为 getter 和 setter 正确构建密钥,而不再担心客户端。