Только что закончил систему кэширования для высоконагруженного проекта на django + nginx, никаких проблем с инвалидацией не испытал. memcached + nginx microcaching. Принцип работы следующий:
- nginx проверяет наличие данных в memcached с помощью memcached_pass, если нашел - возвращает;
- django при рендеринге страницы помещает результат в memcached, при изменении - удаляет.
В исходном виде у этой связки есть только одна проблема - обработка конкурирующих запросов. Если несколько клиентов одновременно попытаются запросить одну и ту же "непрогретую" страницу, то все запросы уйдут в бэкенд (ab -n 1000 -c 100). К счастью, nginx легко позволяет это предотвратить с помощью микрокэширования (uwsgi_cache_valid any 1s; uwsgi_cache_use_stale updating;). В бэкенд при этом уходит только самый первый запрос, параллельные получают результат из файлового кэша, последующие - из memcached. Не слишком элегантно, появляется дополнительный слой кэширования (файловый), но работает отлично. На реальных данных удалось получить ускорение в 1200 раз и неограниченную возможность масштабирования (с помощью дополнительных серверов с nginx в режиме микрокэширования между клиентом и основным сервером).