2016-03-17 5 views
0

Я работаю над приложением NodeJS.Использование Redis Pattern Подписаться

Я новичок в redis, я только что установил его вчера, но хотел бы опубликовать эти данные и подписаться на него из другого процесса.

Предположим, что у меня есть следующие данные:

var Exchanges = [ 
     { 
      _id: 'tsx', 
      name: 'Toronto Stock Exchange', 
      data: { 
       instrument: [ 
        { 
         symbol: 'MBT' 
         markPrice: 0, 
        }, 
        { 
         symbol: 'ACQ' 
         markPrice: 0, 
        } 
       ], 
       orderBooks: [ 
        { 
         symbol: 'MBT', 
         bids: [], 
         asks: [], 
        }, 
        { 
         symbol: 'ACQ', 
         bids: [], 
         asks: [], 
        } 
       ], 
       trades: [ 
        { 
         timestamp: "2014-11-06T20:53:00.000Z", 
         symbol: "MBT", 
         side: "Buy", 
         size: 0, 
         price: 352.80, 
        }, 
        { 
         timestamp: "2014-11-06T20:53:00.000Z" 
         symbol: "ACQ", 
         side: "Sell", 
         size: 0, 
         price: 382.90, 
        } 
       ], 
      }, 
     }, 
     { 
      _id: 'nyse', 
      name: 'New York Stock Exchange', 
      data: { 
       instrument: [ 
        { 
         symbol: 'IBM' 
         markPrice: 0, 
        }, 
        { 
         symbol: 'WMT' 
         markPrice: 0, 
        } 
       ], 
       orderBooks: [ 
        /* Orderbook Data Here */ 
       ], 
       trades: [ 
        /* Trades Data Here */ 
       ], 
      }, 
     } 
    ]; 

Я спасаю это что-то вроде:

exchange.websocket_conn.on('message', function (updateData) { 
     // Use 'updateData' (a diff) to update exchange.data object. 
     // ... 

     // Then 
     redisClient.hmset(exchange._id.toString(), exchange.data); 

     redisClient.publish(exchange._id.toString(), exchange.data); 
    }); 

Это работает и делает публиковать данные, однако я читал о «PSUBSCRIBE ', и мне интересно, можно ли это немного разбить:

Я хотел бы иметь возможность сделать что-то вроде:

someOtherRedisClient.subscribe('tsx'); 
    // Receive All Data from the Exchange Whenever Anything Changes. 

    someOtherRedisClient.subscribe('tsx.instrument'); 
    // Receive 'Instrument' array of All Instruments on Exchange when any Instrument Changes. 

    someOtherRedisClient.subscribe(tsx.instrument:MBT'); 
    // Get Back Only the 'MBT' Instrument Whenever It Changes. 

Можно ли использовать функцию «Pattern Subscribe» для этого?

Спасибо,

ответ

1

Я ломаюсь, что один большой JSON в много JSON-х, один для каждого типа контента, например,

  • Уровень 1 (например, последняя цена сделки, лучшая цена покупки/продажи)
  • Заказать книгу
  • Trades

и создать отдельную тему для каждого, например,

  • mktdata: TSX: level1: MBT будет иметь рыночную цену на МВТ на бирже TSX
  • mktdata: TSX: портфель заказов: MBT будет порядок книги для ОБТ на бирже TSX
  • mktdata: tsx: trades: MBT может быть всеми сделками, но, скорее всего, из-за объема лучше использовать в качестве уведомления клиенту, чтобы сделать отдельный запрос, чтобы получить последние N сделок, требуемых из списка

Вы не говорите, сколько инструментов вы пишете в Redis или сколько разных клиентских приложений потребляют данные, но при условии, что у вас нет большого количества инструментов, вы действительно можете использовать PSUBSCRIBE для получения всей книги заказов обновления по всему обмену и т. д. Учитывая список символов, вы также можете подписаться на длинный список каналов (например, mktdata: tsx: level1: MBT mktdata: tsx: orderbook: MBT mktdata: tsx: level1: ACQ), который может работать до десятков/сотен без проблем.

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