我使用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()
等)?
谢谢!
答案 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();
});
});