Как redis разделяет экземпляр с несколькими пользователями, запущенный на одном сервере?

#redis

Вопрос:

Мое замешательство по поводу Редиса

Если я установлю Redis на своем сервере, и мои 4 разных клиента подключатся к одному и тому же серверу redis, то как данные между ними будут храниться отдельно, чтобы один клиент не переопределял пару ключ-значение, сохраненную другим клиентом.

Напр.:-

клиент-1 имя набора=»адам»

клиент-2 имя набора=»генри»

Так как сервер Redis является общим для этих клиентов, ключ имени, установленный клиентом-1, будет перезаписан клиентом-2, поэтому, когда клиент-1 выполнит get name ==> Генри (поскольку он был обновлен, что неправильно, он ожидал, что это будет адам)>

Итак, как Redis разделяет экземпляр с несколькими пользователями, работающий на одном сервере ? Создает ли он отдельные базы данных внутри или хранит их в соответствии с пользователем или что ?

Ответ №1:

Сам Redis не разделяет ваши данные. Вам придется разделить их самостоятельно. Для этого есть много вариантов.

  1. Использование базы данных Redis: Redis поддерживает несколько баз данных. Каждое приложение (в вашем случае клиент) может быть настроено/выделено для использования в одной конкретной базе данных. Это распределение должно выполняться в конце приложения, а не в Redis.

    Ограничения этого подхода заключаются в следующем: i) Redis поддерживает не более 16 баз данных (обозначается от 0 до 15). ii) Режим кластера Redis поддерживает только одну базу данных.

    Примечание. Команда SELECT используется для выбора конкретной базы данных.

  2. Пространство имен: Каждому приложению может быть (например) присвоен уникальный префикс. Они бы снабдили все свои ключи этим назначенным префиксом.
  3. Используйте отдельный экземпляр Redis для каждого приложения.

Ответ №2:

Поскольку у вас есть пары ключ-значение и вы используете один и тот же ключ для нескольких клиентов, вам нужно будет различать своих клиентов. Способ сделать это-добавить идентификатор вашего клиента к каждому ключу. Таким образом, вместо имени набора вы могли бы сделать что-то вроде набора client1_name. Вам не мешало бы реализовать в своем приложении некоторые функции, которые будут называться как setName и getName , и они будут добавлять идентификатор клиента к имени под капотом. Таким образом, вы реализуете свои вспомогательные функции один раз, гарантируя, что он правильно создает ключи как для геттеров, так и для сеттеров, и больше никогда не беспокоитесь о клиенте.