gpt4 book ai didi

node.js - 使用 Redis 模式订阅

转载 作者:可可西里 更新时间:2023-11-01 11:20:36 24 4
gpt4 key购买 nike

我正在开发 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com