Назад | Перейти на главную страницу

Рекомендуемый способ предварительно прогреть memcached?

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

Хотите знать, есть ли у кого-нибудь образец сценария, который, как они нашли, хорошо подходят для этой цели?

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

Если вы используете какую-то структуру приложения, которая отслеживает популярность изнутри, у нее могут быть некоторые функции для этого (это маловероятно). Наилучший способ активировать memcached - это использовать собственный скрипт, который берет соответствующие вещи и помещает их в хранилище. Однако, если вы используете истечения срока действия, отсутствие случайного выбора этого прайминга может создать проблемы позже, когда истекает срок действия в то же время. В качестве альтернативы, предположим веб-приложение, может оказаться эффективным установка какого-либо сканера, выполняющего глубокое сканирование на 2-3 ссылки. Отказ от попытки заполнения кеша и сосредоточение внимания на том, чтобы некэшированные запросы отвечали достаточно быстро, вероятно, было бы лучшим использованием ресурсов, чем любое из вышеперечисленных.

Реальное решение - не перезагружать сервер еженедельно. Правильно работающая система не должна требовать регулярных перезагрузок (перезагрузка только для очень низкого уровня системных исправлений).

Возможно, посмотрите на переход на решение для кеширования, которое сохраняется на диске, например Redis (http://code.google.com/p/redis/)

Если кому-то это все еще интересно, memcached теперь поддерживает это https://github.com/memcached/memcached/wiki/ReleaseNotes1518

Я согласен с мнением, что в идеале ваш сервер, вероятно, не следует перезагружать еженедельно, если это не ваш график обновлений безопасности.

Redis может решить вашу проблему, а может и не решить; это зависит от данных, которые вы используете. На моем предыдущем концерте мы использовали как Redis (с настойчивостью), так и Memcached.

Однако, чтобы ответить на ваш вопрос, для предварительного прогрева кеша все, что вам нужно сделать, это написать сценарий (или попросить ваших разработчиков сделать это), который копирует запросы, которые они запускают через memcached, но не действуют на их. Имейте в виду, что это имеет смысл только в том случае, если срок действия вашего кеша больше, чем требуется для запуска сценария. Вы можете попробовать это с самыми сложными и / или наиболее частыми запросами.

Может помочь запуск поискового робота, хотя он не дает возможности установить соответствующую дату истечения срока действия.

В качестве общего фона можно найти полезный обзор сценариев здесь> http://docs.oracle.com/cd/E17952_01/refman-5.1-en/ha-overview.html

Чтобы увидеть элементы в memcached (за исключением Peep, который является сценарием Ruby, который, похоже, больше не поддерживается и который я не мог начать работать с Fedora 12), в системе должен быть установлен netcat, а в следующих примерах предполагается, что memcached работает на порту 11211>

эхо «элементы статистики» | NC localhost 11211

Это будет список номеров плит, необходимых в следующей инструкции. Предполагая, что номер плиты равен 17, покажите все элементы в этой плите.

echo «stats cachedump 17 0» | NC localhost 11211

Хотя я бы не рекомендовал делать это на сильно используемой производственной системе!