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

Что заставляет memcache удалять ключи?

Наша установка memcache недавно начала удалять ключи, и мы не знаем почему. Одновременно исчезают большие группы ключей.

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

Кто-нибудь ранее устранял подобную проблему, и если да, то какие шаги вы бы порекомендовали предпринять? Насколько гибка политика истечения срока действия memcache - возможно ли, что мы внезапно столкнемся с критерием, основанным (скажем) на частоте записи в ключ?

Даже если вы установили, что ключи не истекают в Memcached, записи будут удаляться в соответствии с наименее недавно использованными, если Memcached заполняется. Стандартный механизм хранения на основе блоков хранит записи в блоках фиксированного размера, которые выделяются из блоков размером 1 МБ. Хотя это быстро, это также означает, что Memcached может в конечном итоге расходовать довольно много памяти. После того, как плита была выделена для хранения кусков определенного размера, я не думаю, что размеры кусков можно изменить. Если кэшируются как большие, так и мелкие объекты, а состав меняется со временем, возможно, что memcached в конечном итоге сохранит маленькие объекты гораздо большими кусками, если только они доступны.

Это одна из проблем, которые нравятся компаниям, например gear6 (www.gear6.com) и northscale (www.northscale.com) обратились в свои дистрибутивы Memcached.

Оказалось, что это произошло из-за того, что в приложении остался некоторый отладочный код при его развертывании.

Код отладки вручную называется Memcache :: flush.

Я думаю, что мораль этой истории такова: «Каждый раз, когда вы говорите:« Это не приложение », вы, вероятно, ошибаетесь». Вы могли подумать, что я уже знал об этом к тому времени, когда задал этот вопрос, но, видимо, время от времени я мог бы делать напоминания.