我正在开发 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.
是否可以使用“模式订阅”功能来实现这一点?
谢谢,
最佳答案
我会将一个大的 JSON 分解成许多 JSON,每种类型的内容一个,例如
- 第 1 级(例如,最后交易价格、最佳出价/要价)
- 订单簿
- 交易
并为每个主题创建一个单独的主题,例如
- mktdata:tsx:level1:MBT 将具有 TSX 交易所 MBT 的市场价格
- mktdata:tsx:orderbook:MBT 是 TSX 交易所 MBT 的订单簿
- mktdata:tsx:trades:MBT 可能是所有交易,但由于交易量,更有可能更好地用作通知客户进行单独查询以获取最后 N列表中需要的交易
您没有说明您正在向 Redis 中写入多少工具,或者有多少不同的客户端应用程序正在使用数据,但假设您没有大量工具,您确实可以使用 PSUBSCRIBE 获取所有订单簿整个交易所的更新等。给定一个符号列表,您还可以订阅一长串 channel (例如 mktdata:tsx:level1:MBT mktdata:tsx:orderbook:MBT mktdata:tsx:level1:ACQ),它可以运行到几十/几百没有问题。
关于node.js - 使用 Redis 模式订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36066190/