Erixx
@Erixx
На конце два икса.

Где лучше хранить сокет соединение с каждым клиентом, в обычном массиве или в redis?

И почему.
Редис быстрый, но быстрее ли он для этих целей чем обычные переменные - массивы?
Переменные тоже хранятся в оперативной памяти ведь.
  • Вопрос задан
  • 345 просмотров
Решения вопроса 1
Очевидно, что редис намного медленнее, чем обычный доступ к переменной, поэтому оптимальнее всё хранить в переменных. Особенно большой оверхед даст посылка запросов. Например, 100-200 тыс простых запросов в секунду они вполне могут загрузить ваш скрипт на 100% и redis процентов на 30.

Тем не менее, redis всё-равно очень полезная вещь по следующим причинам:
  1. Удобно хранить постоянные данные, которые не должны теряться после остановки/перезапуска скрипта или сервера.
  2. Если доступ к данным требуется сразу из нескольких скриптов. В этом случае если Вы вместо редиса поюзаете хранение в обычных переменных, то получите следующие проблемы:
    • Данные придётся дублировать сразу в нескольких скриптах, что может значительно увеличить расход памяти
    • Нужно следить, что во всех скриптах находится актуальная версия данных.
    • Это сильно усложняет проект и его поддержку. Если раньше нам чтобы что-то изменить, достаточно было записать это в базу данных из любого скрипта, то теперь нам придётся провзаимодействовать с каждым из таких скриптов. Причём просто провзаимодействовать не получится, надо ещё в сами скрипты добавить код, который ответит на это взаимодействие, и обновит данные в своей памяти, а также ещё, возможно, провзаимодействует с другими скриптами.

      В общем, как видите, чтобы проделать даже такую простейшую операцию, приходится проделывать огромное количество действий, а ведь раньше с редисом нам достаточно просто новые данные в базу и всё.

      Другой пример — код становится зависимым. Раньше, у нас ничего не хранилось в памяти скрипта и все запросы были полностью обособлены друг от друга. Теперь же они зависят от каких-то глобальных данных, хранящихся в памяти скрипта. Во-первых, обработчики запросов становятся привязаны друг к другу, во-вторых, усложняется состояние каждой такой подпрограммы, т. к. теперь есть зависимость от глобальных данных, в-третьих, их теперь нельзя так просто взять и перенести в другое место.


Как результат — оба варианта хранения хороши, просто каждый вариант должен использоваться в своей ситуации. Также допустим третий вариант — хранение в редисе с кэшированием в памяти скрипта.

Сокеты конечно же лучше хранить в памяти скрипта, т. к. они не требуют постоянного хранения даже после рестарта сервера и не нужны в других скриптах.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы