2013-11-07 2 views
1

Я хочу использовать Redis для создания системы, которая публикует данные котировки акций подписчикам во внутренней сети. Проблема в том, что публикации недостаточно, так как мне нужно найти способ реализовать атомный механизм «получить моментальный снимок и затем подписаться». Я довольно новичок в Redis, поэтому я не уверен, что мое решение - «правильный путь».Реализация «Снимок и подписка» в Redis

В данный момент у каждого запаса есть книга заказов, которая содержит не более 10 ставок и 10 запросов. Издатель получает данные для обмена и должен публиковать их подписчикам.

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

Как я понимаю, канал Redis никогда не сохраняет информацию, поэтому издателю также необходимо вести полную книгу заказов в хеш-ключ (или отсортированный набор. Я не уверен, что более подходит) в дополнение к публикациям изменений ,
Я также понимаю, что клиент Redis не может выдавать какие-либо команды, кроме подписки и отмены подписки, когда он подписывается на первый канал.

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

Поскольку невозможно использовать подписку, а затем использовать получение в одном соединении, клиентскому приложению требуется два подключения к серверу Redis. На этом этапе я начал думать, что я, вероятно, не делаю что-то правильно, если мне нужно больше одного соединения в одном приложении. Во всяком случае, моя идея заключается в том, что клиент будет иметь подписное соединение и соединение с запросом. Во-первых, он будет использовать подписное соединение для подписки на изменения в книге заказов, но все равно не будет вводить цикл, который обрабатывает события. Впоследствии он будет использовать соединение с запросом, чтобы получить полный снимок книги. Наконец, он войдет в цикл, который обрабатывает события, но, когда он фактически подписался, прежде чем делать снимок, гарантируется, что он не пропустит никаких изменений, которые произошли после того, как был сделан снимок.

Есть ли лучший способ достичь моей цели?

+1

Я бы с двумя соединениями тоже. –

ответ

0

Я надеюсь, что вы нашли свой путь уже, если не здесь идет ничего предложение:

Если вы в JavaScript земли я рекомендовал бы посмотреть на Meteor.js они каким-то образом достичь цели, которые вы хотите достигните, с настройкой по умолчанию вы закончите писать в mongodb, чтобы «обновить» графический интерфейс для «конечного пользователя».

В любом случае, вы можете быть заинтересованы в чтении о том, как работает протокол DDP метеора: https://meteorhacks.com/introduction-to-ddp/ и https://www.meteor.com/ddp

Смежные вопросы