Atualizar dados em cache com TTL e invalidação

RedisBeginner
Pratique Agora

Introdução

O cache reduz leituras, mas pode manter um preço antigo quando a origem muda. Observe essa janela, deixe o valor expirar e use invalidação explícita para tornar uma atualização imediatamente visível.

Conclua Add a Cache to a Product Lookup. Esta VM nova fornece sua própria aplicação, catálogo DynamoDB e nó Valkey conectado. Use Terminal para AWS CLI e comandos da aplicação, e AWS View para comparar a origem e as respostas. Nenhum recurso de VM anterior é reutilizado.

Relação com a certificação

Certificação Tarefa do exame Prática
Cloud Practitioner (CLF-C02) Task 3.4 Distinguir o cache em memória dos dados de referência e observar o comportamento da aplicação.

Visão conceitual deste laboratório

Renovar o preço após a expiração do TTL

TTL, tempo de vida, limita a disponibilidade de um valor em cache. A expiração remove a cópia, sem apagar o item de referência no DynamoDB.

Confirme a identidade e examine as configurações:

cd /home/labex/project
aws sts \
  get-caller-identity
cat app.json

O ARN termina em labex-ca02-operator. A aplicação já usa cache-aside; 101 começa em 20.00. Salve e exiba o endpoint:

CACHE_HOST=$(jq -r .cache_host app.json)
echo "$CACHE_HOST"

Configure cinco segundos para a demonstração. Somente novas gravações usam esse TTL; mudar a configuração não altera chaves existentes retroativamente:

jq '.ttl_seconds = 5' app.json > app.next.json
mv app.next.json app.json

Execute o bloco seguinte inteiro, sem pausas: leia o valor original, atualize DynamoDB diretamente e consulte novamente antes de cinco segundos. A atualização direta não avisa o cache da aplicação:

curl -sS http://127.0.0.1:8080/api/products/101
aws dynamodb \
  update-item \
  --table-name product-catalog \
  --key '{"product_id":{"S":"101"}}' \
  --update-expression 'SET price = :price' \
  --expression-attribute-values '{":price":{"N":"21.00"}}' \
  --return-values ALL_NEW
curl -sS http://127.0.0.1:8080/api/products/101

A origem retorna 21.00, mas a resposta imediata mantém 20.00 com served_from: cache. AWS View mostra o novo registro e as configurações. Atualizar o banco não invalida automaticamente o cache. Espere além do TTL e consulte:

sleep 6
curl -sS http://127.0.0.1:8080/api/products/101

A resposta retorna 21.00 da origem. A chave expirada estava ausente, então a aplicação leu DynamoDB e guardou o novo valor. Consulte rapidamente a duração restante:

valkey-cli -h "$CACHE_HOST" -p 6379 TTL product:101

Um número positivo indica segundos restantes; -2 significa que a chave já expirou. Cinco segundos servem à observação educativa, sem recomendar um TTL de produção. A escolha depende de quanto atraso nos dados é aceitável. Exemplo de AWS View após expirar: origem e resposta mostram 21.00 com TTL de cinco segundos. Seu contador pode diferir.

Invalidar imediatamente o produto atualizado

A invalidação remove uma cópia para que a próxima solicitação leia a origem atual. Ela complementa o TTL e torna mudanças conhecidas visíveis sem esperar.

O HTTP PUT da aplicação atualiza DynamoDB e apaga a chave correspondente. Execute preenchimento, atualização e duas leituras em um bloco, para observar o TTL curto:

curl -sS http://127.0.0.1:8080/api/products/101
curl -sS -X PUT \
  -H 'Content-Type: application/json' \
  --data '{"price":"22.00"}' \
  http://127.0.0.1:8080/api/products/101
curl -sS http://127.0.0.1:8080/api/products/101
curl -sS http://127.0.0.1:8080/api/products/101

A atualização informa invalidation_key: product:101 e normalmente removed: 1. Se a chave já expirou, removed: 0 é válido, mas a chave de invalidação deve continuar correta. A próxima consulta retorna 22.00 da origem e a seguinte do cache. Leitura e invalidação devem usar a mesma chave.

Verifique que o produto independente 202 continua sendo Notebook por 12.50:

aws dynamodb \
  get-item \
  --table-name product-catalog \
  --key '{"product_id":{"S":"202"}}' \
  --consistent-read

Deixe a aplicação atualizada para verificar. As verificações consultam resultados reais e registros da origem; não exigem uma chave presente além de seu TTL curto. Exemplo após atualizar a aplicação: o preço é 22.00 e Notebook permanece intacto. Outra solicitação pode ler a origem após expirar o TTL curto.

Resumo

Você observou um preço desatualizado após mudar diretamente a origem, sua renovação ao expirar e a renovação imediata por invalidação direcionada. A origem permanece autoritativa; o TTL limita a janela e a aplicação invalida a chave exata de leitura.

Para aprofundar o tema, consulte a documentação da AWS: TTL e desatualização aceitável do cache; Resultados de TTL no Valkey.