Недавно я реализовал memcache на моем сайте, который был под тяжелой загрузкой mysql (mysql был так же оптимизирован, как я мог это сделать). Он решил все мои проблемы с загрузкой, и сайт работает красиво.
Проблема, с которой сейчас сталкивается Im, - это устаревшие кешированные значения. У меня есть время истечения времени в 1 час на большинстве страниц, и я также удаляю ключ, когда значение в блоках DB, но Im с трудом отслеживает и эффективно очищает все ключи.
На некоторых страницах его тривиально. Я могу сделать ключ item_id (например, item_4653), а когда данные для него обновляются или элемент удален, ключ очищается.
Но на большинстве страниц я беру script имя_файла + querystring, md5 и использую его как ключ в memcache. Это особенно полезно для сложных URL-адресов (которые очень распространены).
Например, у меня загружена следующая страница.
?index.php search_keywords = хорошо & search_section = 1 & = выпуск рода & страница = 2
Он будет содержать список элементов, которые будут извлечены из memcache. Затем другой пользователь отправляет элемент, который имеет "хороший" в своем названии, и он находится в диапазоне значений, где он появится на стр. 2, за исключением того, что он не появится там, пока не будет обновлен кеш. Что еще более усложняет, так это то, что вновь добавленный элемент также появится на index.php? Sort = newest, а также index.php? Category = some_category? Page = 1 и т.д. Каждый из них будет иметь уникальную key (md5 из script name + строка запроса).
Таким образом, недавно добавленный элемент может появиться на десятках страниц, если они были извлечены из Live DB, но он не будет виден ни на одном из них, пока не будет обновлен устаревший кеш. Единственный вариант - дождаться истечения срока действия элемента.
Эта проблема становится еще более выраженной на моем форуме (пользовательская кодировка), где значения HAVE должны быть обновлены по требованию для всех возможных кеш-комбинаций страниц. Допустим, у меня 4 страницы, и я замечаю 3 спам-сообщения на странице 2. После их удаления страница 2 перестраивается, но затем она также должна перестраивать страницы 3 и 4, в противном случае будут дублироваться сообщения на новой странице восстановления 2, и старая страница 3. Это просто пример для..... Есть десятки этих сценариев.
Любые идеи?