【问题标题】:Using Redis Pattern Subscribe使用 Redis 模式订阅
【发布时间】:2016-07-04 03:12:57
【问题描述】:

我正在开发一个 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.

可以使用“模式订阅”功能来实现吗?

谢谢,

【问题讨论】:

    标签: node.js redis publish-subscribe


    【解决方案1】:

    我会将一个大 JSON 分解为多个 JSON,每个内容对应一个,例如

    • 1 级(例如最后交易价格、最佳买价/卖价)
    • 订单簿
    • 交易

    并为每个主题创建一个单独的主题,例如

    • mktdata:tsx:level1:MBT 将获得 MBT 在 TSX 交易所的市场价格
    • mktdata:tsx:orderbook:MBT 将是 TSX 交易所 MBT 的订单簿
    • mktdata:tsx:trades:MBT 可能是所有交易,但更有可能的是,由于交易量,最好将其用作通知客户进行单独查询以获取所需的最后 N 笔交易一个列表

    您没有说明您正在向 Redis 写入多少工具,或者有多少不同的客户端应用程序正在使用数据,但假设您没有大量工具,您确实可以使用 PSUBSCRIBE 来获取所有订单簿整个交易所的更新等。给定一个符号列表,您还可以订阅一长串频道(例如 mktdata:tsx:level1:MBT mktdata:tsx:orderbook:MBT mktdata:tsx:level1:ACQ),它可以运行到几十/几百没有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-06
      • 2012-05-01
      • 2013-10-27
      • 2017-01-24
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多