Что заставляет memcache удалять ключи?
Наша установка memcache недавно начала удалять ключи, и мы не уверены, почему. Большие группы ключей исчезают одновременно.
Memcache сообщает, что выселений мало или вообще не существует, и наше приложение не может очистить memcache (оно может удалять только определенные ключи). Даже ключи, о которых приложение не знает, удаляются, поэтому мы уверены, что срок их действия истек. Тем не менее, наша конфигурация memcache не была затронута в течение некоторого времени.
Кто-нибудь ранее решал подобные проблемы, и если да, то какие шаги вы бы порекомендовали предпринять? Насколько гибка политика истечения срока действия memcache - возможно ли, что мы внезапно столкнемся с критерием, основанным (скажем) на частоте записи в ключ?
2 ответа
Это произошло из-за того, что некоторый отладочный код был оставлен в приложении при его развертывании.
Код отладки вручную вызывается Memcache::flush.
Я думаю, что мораль этой истории такова: "Каждый раз, когда вы говорите" это не может быть заявлением ", вы, вероятно, ошибаетесь". Вы могли бы подумать, что я знал бы это, когда я задал этот вопрос, но, видимо, я мог время от времени делать напоминания.
Даже если вы установили, что ключи не истекают в Memcached, записи будут удаляться в соответствии с наименьшим количеством использовавшихся недавно, если Memcached заполняется. Стандартный механизм хранения на основе блоков сохраняет записи в виде фрагментов фиксированного размера, которые выделяются из блоков размером 1 МБ. Хотя это быстро, это также означает, что Memcached может в итоге тратить довольно много памяти. После размещения плиты для хранения фрагментов определенного размера, я не думаю, что их можно изменить. Если смесь больших и маленьких объектов кэшируется, и состав со временем изменяется, возможно, что memcached в конечном итоге будет хранить маленькие объекты в гораздо больших блоках, если они являются единственными доступными.
Это одна из проблем, которую такие компании, как gear6 (www.gear6.com) и northscale (www.northscale.com), затрагивают в своих дистрибутивах Memcached.