Как создать соединение Redis с Master и Slave

Я пытаюсь установить соединение с Redis, у меня есть «главный» порт и два подчиненных. Я хочу сделать это с Sentinel.

Мой код для подключения Redis на самом деле устарел, я так думаю.

Вот мой код.

var redis = require('redis');
var client = redis.createClient(config.redis_port, config.redis_host,
{no_ready_check: true});

if (config.redis_password != null) {
  client.auth(config.redis_password, function (err) {
    if (err) throw err;
  });
}

client.on('connect', function(err, res) {
  logger.info('Connected to Redis ' + process.pid);
  redisIsReady = true;
});

client.on('error', function(err) {
  logger.error('Error connecting to Redis ' + process.pid);
  redisIsReady = false;
});

client.get(objectRequest.customerId, function(err, reply) {
    if (reply != null && reply >= config.max_requests) {
      var json = JSON.stringify({errorCode: validationErrors.TOO_MANY_REQUEST,
        description: errorMessage[validationErrors.TOO_MANY_REQUEST]});
      res.setHeader('Retry-After', config.retry_after);
      res.setHeader('Content-Type', 'application/json');
      res.setHeader('Content-Length', json.length);
      res.writeHead(429);
      res.write(json);
      return res.end();
    }
    // Set a value with an expiration
    client.incr(objectRequest.customerId);
    client.expire(objectRequest.customerId, config.retry_after);
});

Я читаю другие сообщения и думаю, что, возможно, будет круто сделать это с ioredis. Но я мало знаю о Redis...

Я хочу подключиться к Redis, и если мастер не работает, он автоматически подключается к подчиненному.

Надеюсь, ты поможешь мне,

Рот.


person Roth    schedule 08.06.2017    source источник
comment
иногда к тому времени, когда вы пытаетесь получить значение objectRequest.customerId, клиент может не подключиться к серверу и не аутентифицировать себя.   -  person Vishnu    schedule 08.06.2017
comment
Это не моя проблема, я хочу подключиться к Redis, и если мастер не работает, он автоматически подключается к подчиненному. но спасибо за ваш ответ.   -  person Roth    schedule 08.06.2017
comment
stackoverflow.com/questions/34155977 /   -  person Vishnu    schedule 12.06.2017


Ответы (1)


Я, наконец, сделал это, и это работает хорошо.

Я дам вам здесь мой код, я надеюсь, что это поможет другим!

var Redis = require('ioredis');
// preferredSlaves array format
var preferredSlaves = [
  { ip: config.redis_slave_1, port: config.redis_port, prio: 1 },
  { ip: config.redis_slave_2, port: config.redis_port, prio: 2 }
];
var redis = new Redis({
  port: config.redis_port,
  host: config.redis_host,
  sentinels: [{ host: config.redis_sentinel_1, port: config.redis_sentinel }, { host: config.redis_sentinel_2, port: config.redis_sentinel }, { host: config.redis_sentinel_3, port: config.redis_sentinel }],
  name: config.redis_master_name,
  password: config.redis_password,
  preferredSlaves: preferredSlaves
});

redis.on('connect', function(err, res) {
  logger.info('Connected to Redis ' + process.pid);
  redisIsReady = true;
  console.log('Connected to Redis ' + process.pid + " REDIS " + JSON.stringify(redis.options) )
});

redis.on('error', function(err) {
  logger.error('Error connecting to Redis ' + process.pid);
  redisIsReady = false;
  console.log('error to Redis ' + err)
});

Спасибо за все ваши ответы,

С уважением!!

person Roth    schedule 12.06.2017