Nano Hash - криптовалюты, майнинг, программирование

Почему я должен закрывать или оставлять соединения Redis открытыми?

Я использую Redis в проекте PHP. Я использую phpredis в качестве клиента. Иногда во время длинных CLI-скриптов возникают ошибки сегментации PHP.

Раньше я сталкивался с тем, что у phpredis возникают проблемы, когда время ожидания соединения истекает. Поскольку моя конфигурация Redis настроена на автоматическое закрытие простаивающих соединений через 300 секунд, я предполагаю, что это вызывает ошибку сегментации.

Чтобы иметь возможность выбрать, увеличить ли время ожидания соединения или установить его по умолчанию на 0 (что означает «никогда время ожидания»), я хотел бы знать, каковы возможные преимущества и недостатки?

Почему мне никогда не следует закрывать соединение?
Почему я должен следить за тем, чтобы соединения не оставались открытыми?

Спасибо


Ответы:


1

Как правило, открытие соединения является дорогостоящей операцией, поэтому в современных рекомендациях рекомендуется держать их открытыми. С другой стороны, для управления открытыми соединениями требуются ресурсы (из базы данных), поэтому поддержание большого количества незанятых соединений также может быть проблематичным. Этот компромисс обычно разрешается с помощью пулов соединений.

Тем не менее, что более интересно, так это почему PHP segfault. Тайм-аут, очевидно, вызван длительной командой (скрипт CLI в вашем случае), которая блокирует Redis (который в основном одиночный threaded) от обслуживания подключений приложения PHP. Хотя это хорошо известное поведение Redis, я ожидаю, что PHP (событие без функции повторного подключения в клиентской библиотеке) не будет так жалко обсирать штаны.

12.05.2014

2

Ответ на ваш вопрос во многом зависит от случаев использования Redis в вашем приложении. Итак, следует ли вам никогда не закрывать соединение с истечением времени простоя соединения?

В целом нет, следует оставить значение по умолчанию - 0. Почему и когда:

  • Любые виды долгоживущих приложений. Например, CLI-скрипт или фоновый рабочий. Почему - phpredis не имеет встроенной функции переподключения, поэтому вам следует позаботиться об этом самостоятельно или не использовать тайм-аут простоя.
  • Каждый раз, когда ваш запрос обрабатывается или сценарий CLI умирает, все соединения будут закрыты движком php. Сервер Redis закрывает все соединения для закрытых клиентских сокетов. У вас не будет проблем вроде подключения зомби или чего-то в этом роде. Как расширение, phpredis закрывает соединение в деструкторе, поэтому вы можете быть уверены, что соединения не остаются открытыми.

p.s. Конечно, вы можете реализовать переподключение в каком-то прокси-классе в php самостоятельно. У нас есть Redis в среде с высокой нагрузкой - ~ 4000 подключений в секунду на экземпляре. После версии 2.4 мы не используем время простоя соединения. И не иметь никаких проблем с этим.

09.05.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..