Tenho experimentado tempos de expiração aleatórios de cache para evitar situações em que uma solicitação individual força várias coisas a serem atualizadas de uma só vez. Por exemplo, uma página da web pode incluir cinco componentes diferentes. Se cada um estiver definido para atingir o tempo limite em 30 minutos, o usuário terá um longo tempo de espera a cada 30 minutos. Então, em vez disso, você define todos eles para um tempo aleatório entre 15 e 45 minutos para tornar provável que no máximo apenas um componente seja recarregado para qualquer carregamento de página.
Estou tentando encontrar alguma pesquisa ou diretrizes sobre esse tópico, por exemplo, parâmetros de variação ideais. Lembro-me de ver um artigo sobre como o Google (?) Usa essa técnica, mas não é possível localizá-la, e não parece haver muita coisa escrita sobre o assunto.
fonte
Respostas:
Alguns documentos:
fonte
Voltando para responder à minha própria pergunta, o principal problema aqui é como evitar que tudo sempre expire ao mesmo tempo. Se isso acontecer, o sistema diminuirá a velocidade e ficará congestionado enquanto repovoa o cache.
Na maioria das vezes, isso realmente não é um problema na prática. Com o tempo, todos os componentes tendem a flutuar em termos de tempo em que estão expirando. Se houver vários componentes sendo reconstruídos ao mesmo tempo, é um cheiro de código, porque provavelmente eles devem ser armazenados em cache como um único componente (por exemplo, se você tiver o cabeçalho, o corpo e o rodapé exclusivos de uma página armazenados em cache separadamente, talvez você possa apenas armazene em cache a página).
Certamente, há momentos em que muitas coisas precisam ser armazenadas em cache ao mesmo tempo, por exemplo, após iniciar um sistema, se limpamos todo o cache ou giramos as chaves do cache. Nesse caso, geralmente não é tão ruim porque os componentes se enchem rapidamente e as expirações se separam.
Na medida em que isso é um problema, existem algumas soluções:
fonte