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