我正在使用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,则此当前方法会失败。我的问题是,如何组织事件侦听器,以便可以在订阅者客户端和各种方法(.lrange()、.publish()等)上安全地调用.subscribe()。发布者监听程序的?
谢谢!
发布于 2014-06-03 22:05:04
只需将客户端创建移动到就绪回调函数中。
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();
});
});https://stackoverflow.com/questions/24015461
复制相似问题