O documento discute estratégias de cache em diferentes camadas como navegador, rede, servidor e aplicação. O cache melhora o desempenho ao armazenar recursos para uso futuro, evitando novas requisições e cálculos. Cabeçalhos HTTP definem como e quando recursos podem ser cacheados.
13. • documentos
• imagens
• scripts e folhas de estilo
• requisições assíncronas
O que pode ser cacheado?
por alguns minutos
por alguns meses
por alguns meses
por alguns minutos
14. Os cabeçalhos de resposta
do HTTP estabelecem
como e se o cache pode
ser feito
20. permitem adicionar mais
informações sobre o
recurso
Last-Modified: Mon, 12 Sep 2016 22:06:39 GMT
Etag: W/"337e7-8HrLmYe6UGIUDolQeGLoyw"
Cabeçalhos de resposta
21. GET /main.css HTTP/1.1
Host: jcemer.com
HTTP/1.1 200 OK
Date: Tue, 13 Sep 2016 13:32:50 GMT
Last-Modified: Mon, 12 Sep 2016 15:23:17 GMT
Cache-Control: max-age=604800
informação nova
22. permitem reaproveitar o
recurso caso a cópia em
cache ainda seja válida
If-Modified-Since: Mon, 12 Sep 2016 15:23:17 GMT
If-Match: W/"337e7-8HrLmYe6UGIUDolQeGLoyw"
Cabeçalhos de requisição
33. O servidor de cache
intermedia a comunicação
com a aplicação ou
demais servidores
34. • imagens
• scripts e folhas de estilo
• documentos comuns a
todos os usuários
O que pode ser cacheado?
por alguns meses
por alguns meses
por alguns minutos
56. Varnish e Squid possuem
estratégias melhores para
revalidar o cache sem
penalizar o usuário
http://serverfault.com/questions/576402/nginx-serving-stale-cache-
response-while-updating
61. Memoization é a prática
de armazenar o resultado
de operações para evitar
futuras execuções
62. def program
@program = Program.find(program_id) unless
defined? @program
end
https://github.com/rails/rails/commit/
36253916b0b788d6ded56669d37c96ed05c92c5c
Video class
84. noeviction
allkeys-lru
evict keys trying to remove the less recently
used keys first
volatile-lru
equals allkeys-lru but only among keys that
have an expire set
http://redis.io/topics/lru-cache
85. O uso de um serviço para
cache introduz um ponto
único de falha
😓
87. Redis suporta tolerância
a falhas através de
persistência em disco,
replicação e sentinel
http://redis.io/topics/persistence
http://redis.io/topics/replication
http://redis.io/topics/sentinel
88.
89. Sharding pode escalar o
cache horizontalmente e
melhorar a tolerância a
falhas
https://github.com/twitter/twemproxy