2016-03-08 2 views
0

Представьте простой сервер ключ-значение, которое позволяет следующие глаголы:Что такое семантика хранилища ключевого значения?

PUT ключевое значение - Устанавливает значение ключа дорожить GET ключ - Получает значение ключа, если он установлен, или указывает на то, что отсутствует Тайм-аут WAIT - если значение ключа установлено, немедленно получите его. В противном случае заблокируйте/подождите, пока кто-то еще не запустит ключ, вернувшись как можно быстрее. Если тайм-аут достигнут, укажите отказ.

Эти семантики несколько похожи на фьючерсы и обещания в различных средах локального исполнения, но в распределенной среде я представляю, что это обычно выполняется с помощью некоторой комбинации протокола обмена сообщениями и хранилища значений ключа.

мне интересно, если кто-либо:

  1. Осознавая хорошее имя для этой семантики, так что я могу начать прибегая к помощи
  2. Осознавая инструмент, который предлагает это из коробки

ответ

0

Все еще не уверены в том, что называется семантикой, но это достигается с помощью блокировки redis.

Использование блокировки поп/выталкивает со списками одноэлементных, мы можем реализовать GETs следующим образом:

BRPOPLPUSH кв.кв 0

Если список уже существует, то он сразу же возвращает значение , а затем просто добавьте его обратно в список. Если он не будет заблокирован до тех пор, пока не будет добавлено значение (или вы можете установить таймаут с использованием последнего аргумента).

Чтобы установить значение, вы можете просто нажать на список.

LPUSH д 1

Если вы хотите, чтобы обеспечить истинную семантику SET, вы можете предпочесть сделку

MULTI 
DEL q 
LPUSH q 1 
EXEC