Допустим, у меня есть несколько функций AWS Lambda, которые составляют мой API. Одна из функций считывает определенное значение с определенной клавиши на одном узле Redis. Бизнес-логика выглядит следующим образом:
if the key exists:
serve the value of that key to the client
if the key does not exist:
get the most recent item from dynamoDB
insert that item as the value for that key, and set an expiration time
delete that item from dynamoDB, so that it only gets read into memory once
Serve the value of that key to the client
Идея состоит в том, что каждый раз, когда клиент делает запрос, он получает необходимое ему значение. Если срок действия ключа истек, lambda должен сначала получить элемент из базы данных и вернуть его в Redis.
Но что произойдет, если 2 клиента одновременно вызовут API-интерфейс к лямбде? Будут ли оба лямбда-процесса читать, что ключа нет, и оба будут брать элемент из базы данных?
Моя цель состоит в том, чтобы создать очередь, в которой определенный элемент находится в памяти только X раз, и как только этот элемент истекает, следующий элемент должен быть извлечен из базы данных, и когда он извлекается, он должен также будет удален, чтобы он не был извлечен снова.
Я пытаюсь понять, есть ли способ сделать это без отдельного процесса EC2, который просто отслеживает время.
Является ли Redis + Lambda + DynamoDB хорошей установкой для того, что я пытаюсь выполнить, или есть лучшие способы?