Redis кеширование для Mongodb работает медленно - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть следующий код nodejs

const redis = require('redis');
const client = redis.createClient();

module.exports = client;

в файле и следующий код в другом

redis.set(user.id, JSON.stringify(user), function (error) {
if (error) {
logger.log('error', "Redis error: " + error)
}
console.log("Saved to Redis");

Цель состоит в том, чтобы прочитать значение из redis при десериализации пользователя, которыйredis делает

    redis.get(id, function (error, data) {
        if (error) {
            logger.log('error', 'Redis error');
        }
        if (data) {
            console.log("Redis");
            let redisUser = JSON.parse(data);
            done(null, redisUser);
        } else {
            console.log("Mongo");
            userDb.findById(id)
                .then(user => done(null, user))
                .catch(err => logger.log('error', 'Error when deserializing the user: ' + err))
        }
    })

Однако, используя синхронизацию Chrome с водопадом, я обнаружил, что время, затрачиваемое Redis, почти такое же, как у MongoDb (примерно 180 - 270 мс), но я реализовал redis как более быстрыйхранить для быстрого поиска.Я не знаю, в чем может быть ошибка, но я подозреваю, что это может быть мой другой код, который предназначен для Socket.IO для сохранения сессий в Redis с использованием pubClient и SubClient.Код находится в другом файле, как показано ниже

'use strict';
const config = require('./config')
const redis = require('redis').createClient;
const adapter = require('socket.io-redis');

//Social authentication Logic
require('./auth')();

let ioServer = app => {
app.locals.chatrooms = [];
const server = require('http').Server(app);
const io = require('socket.io')(server);
/** Force socket Io to use web sockets as its default transportation medium
*Implements session affinity on the server
*/
io.set('transports', ['websocket']);
//Interface for sending or publishing data buffers
let pubClient = redis(config.redis.port, config.redis.host, {
  auth_pass: config.redis.password
});

/**Interface for subscribing or getting data
 *Return buffers is to tell redis to return data in its original data format, 
 *By default redis will return data as Strings
 */
let subClient = redis(config.redis.port, config.redis.host, {
  return_buffers: true,
  auth_pass: config.redis.password
});
//Specify a custom adapter to Socket.io
io.adapter(adapter({
  pubClient,
  subClient
}));
io.use((socket, next) => {
  require('./session')(socket.request, {}, next);
})
require('./socket')(io, app);
return server;
}



module.exports = {
  router: require('./routes')(),
  session: require('./session'),
  ioServer,
  logger:require('./logger')
}

В чем может быть причина, могу ли я быть прав, что это ошибка, и если это так, каковы возможные способы интеграции Redis в сокет.io и кешировать.Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...