Введение
Кэш уменьшает чтения, но после изменения источника может возвращать старую цену. Наблюдайте это окно, дождитесь истечения срока и используйте явную инвалидацию для немедленного отображения обновления.
Сначала пройдите Add a Cache to a Product Lookup. Новая VM независимо предоставляет приложение, каталог DynamoDB и подключённый Valkey. Используйте Terminal для AWS CLI и запросов приложения, AWS View — для сравнения. Ресурсы предыдущей VM не используются.
Связь с сертификацией
| Сертификация | Задача экзамена | Практика |
|---|---|---|
| Cloud Practitioner (CLF-C02) | Task 3.4 | Отличать кэш в памяти от достоверных исходных данных и наблюдать поведение приложения. |

Обновление цены после истечения TTL
TTL, время жизни, ограничивает доступность копии в кэше. Истечение удаляет копию, но не исходный элемент DynamoDB.
Подтвердите идентификацию и проверьте настройки:
cd /home/labex/project
aws sts \
get-caller-identity
cat app.json
ARN оканчивается на labex-ca02-operator. Приложение уже использует cache-aside, исходная цена 101 — 20.00. Сохраните и выведите endpoint:
CACHE_HOST=$(jq -r .cache_host app.json)
echo "$CACHE_HOST"
Установите пять секунд для короткой демонстрации. Настройка применяется к новым записям кэша, но не меняет срок существующих ключей:
jq '.ttl_seconds = 5' app.json > app.next.json
mv app.next.json app.json
Выполните следующий блок целиком без пауз: прочитайте исходный товар, напрямую обновите DynamoDB и снова запросите товар до истечения пяти секунд. Прямое обновление не уведомляет кэш приложения:
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
Источник сообщает 21.00, немедленный ответ кэша — 20.00 с served_from: cache. AWS View показывает новый исходный элемент и конфигурацию. Изменение базы не инвалидирует кэш автоматически. Подождите дольше TTL и запросите:
sleep 6
curl -sS http://127.0.0.1:8080/api/products/101
Ответ возвращает 21.00 из источника: истёкший ключ отсутствует, поэтому приложение читает DynamoDB и сохраняет новое значение. Быстро проверьте оставшееся время:
valkey-cli -h "$CACHE_HOST" -p 6379 TTL product:101
Положительное число — оставшиеся секунды, -2 означает уже истёкший ключ. Пять секунд выбраны для наблюдения, а не как производственная рекомендация. TTL зависит от допустимого устаревания.

Немедленная инвалидация изменённого товара
Инвалидация удаляет копию, чтобы следующий запрос прочитал актуальный источник. Она дополняет TTL и делает известное изменение видимым сразу.
HTTP PUT приложения обновляет DynamoDB, затем удаляет соответствующий ключ. Выполните заполнение, обновление и два чтения одним блоком, чтобы наблюдать короткий TTL:
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
Ответ указывает invalidation_key: product:101 и обычно removed: 1. Если ключ уже истёк, removed: 0 допустим, но ключ инвалидации всё равно должен быть правильным. Следующий запрос возвращает 22.00 из источника, повторный — из кэша. Чтение и инвалидация должны использовать один ключ.
Проверьте независимый товар 202: Notebook по-прежнему стоит 12.50:
aws dynamodb \
get-item \
--table-name product-catalog \
--key '{"product_id":{"S":"202"}}' \
--consistent-read
Оставьте обновлённое приложение для проверки. Проверки читают реальные результаты и исходные записи; ключ не обязан сохраняться после короткого TTL.

Итоги
Вы наблюдали старую цену после прямого изменения базы, обновление после TTL и немедленное обновление через точечную инвалидацию. Источник остаётся достоверным, TTL ограничивает окно устаревания, а приложение удаляет точный ключ чтения.
Подробнее см. в документации AWS: TTL и допустимое устаревание кэша; Результаты TTL в Valkey.


