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. |

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.

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.

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.


