Gostaria de saber qual seria a melhor abordagem para invalidar / atualizar objetos de cache.
Pré-requisitos
- Ter servidor memcached remoto (servindo como cache para vários aplicativos)
- Todos os servidores são hospedados pelo azure (regiões de afinidade, mesmos data centers)
- O tamanho do objeto de cache varia de 200 bytes a 50 kilobytes
Abordagem 1 (armazenar no cache o mais rápido possível)
- O objeto A é criado -> armazenar no banco de dados e armazenar no cache
- Objeto A solicitado pelo cliente -> verificar a existência de cache, caso contrário, buscar no banco de dados e armazenar no cache
- O objeto A é atualizado -> armazenar no banco de dados, armazenar no cache
A abordagem 1 parece ser mais direta. Se algo for criado, coloque no cache o mais rápido possível. Independentemente de alguém vai precisar.
Abordagem 2 (armazenamento lento do cache)
- O objeto A é criado -> armazenar no banco de dados
- Objeto A solicitado pelo cliente -> verificar a existência de cache, caso contrário, buscar no banco de dados e armazenar no cache
- O objeto A é atualizado -> armazenar no banco de dados, excluir chave no cache
A abordagem 2 parece ter mais consciência da memória. Nesta abordagem, apenas os itens solicitados vão para o cache.
Pergunta 1: Tendo em vista o desempenho, qual seria uma abordagem melhor? A memória nem a CPU ainda não contam.
Pergunta 2: Meus pensamentos são uma espécie de otimização prematura?
Pergunta 3: Quaisquer outros pensamentos? Outras abordagens?
performance
azure
memcached
caching
lurkerbelow
fonte
fonte
O memcached gerencia objetos com sua própria política, que objeto em cache expiraria se ninguém acessá-lo ou se o memcached ficar sem memória. Portanto, sua primeira abordagem não é uma boa ideia, pois seu objeto no memcached continuaria sendo invalidado devido à falta de memória ao criar objetos.
Q1 A abordagem 2 seria melhor em termos de desempenho, porque não envia objetos para o cache de memcached, embora a melhoria de desempenho seja muito pequena.
Q2 É difícil dizer. Suponha que você conheça o gargalo e elabore as abordagens, não seria prematuro.
Q3 Existem outras abordagens, como cache apenas no memcached.
fonte