如何组织多个Redis客户端

时间:2014-06-03 12:41:26

标签: node.js redis node-redis

我使用redis-sentinel-client库来管理与Redis哨兵组的连接。我遇到的问题是,在连接时我需要处理可能已经存在或可能不存在于Redis商店中的记录。

由于我有两个客户端(由于one is a subscriber这一事实),我不确定组织我的事件监听器的最佳方式,以便我保证在尝试任何操作之前两个客户端都已准备就绪。

目前我有以下内容:

var sentinelSubscriberClient = RedisSentinel.createClient(opts);
var sentinelPublisherClient = RedisSentinel.createClient(opts);

sentinelSubscriberClient.on('ready', function redisSubscriberClientReady() {
    sentinelPublisherClient.removeAllListeners('ready');

    sentinelPublisherClient.on('ready', function () {
        supportedChannels.forEach(function (channel) {
            sentinelSubscriberClient.subscribe(channel);
        });

        // Includes reading + publishing via `sentinelPublisherClient`
        processUnprocessed();
    });
});

(还有error个听众,但我已删除它们以使代码更易于阅读)

如果发布者客户端在订阅者客户端之前发出ready,则此当前方法会失败。我的问题是如何组织事件监听器,以便我可以安全地在订阅者客户端上调用.subscribe()以及发布者侦听器的各种方法(.lrange().publish()等)?

谢谢!

1 个答案:

答案 0 :(得分:0)

只需将客户端创建移动到就绪回调函数中即可。

var sentinelSubscriberClient = RedisSentinel.createClient(opts);
var sentinelPublisherClient = null;

sentinelSubscriberClient.on('ready', function redisSubscriberClientReady() {
    sentinelPublisherClient = RedisSentinel.createClient(opts);
    sentinelPublisherClient.on('ready', function () {
        supportedChannels.forEach(function (channel) {
            sentinelSubscriberClient.subscribe(channel);
        });

        // Includes reading + publishing via `sentinelPublisherClient`
        processUnprocessed();
    });
});