У меня есть следующий код 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 и кешировать.Заранее спасибо.