我正在研究NodeJS应用程序。
我是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'功能来实现这个目标吗?
谢谢,
答案 0 :(得分:1)
我将一个大JSON分解成许多JSON,每种类型的内容都有一个,例如。
并为每个主题创建一个单独的主题,例如
你没有说你在Redis上写了多少乐器,或者有多少不同的客户应用程序正在使用这些数据,但假设你没有大量的乐器,你确实可以使用PSUBSCRIBE来获取所有的订单给定一个符号列表你也可以订阅一长串的符号(例如mktdata:tsx:level1:MBT mktdata:tsx:orderbook:MBT mktdata:tsx:level1:ACQ),它可以运行到几十/几百毫无问题。