redis.js 1.22 KB

const _ = require('lodash');
const redis = require('redis');
const bluebird = require('bluebird');
const config = require('../config/common');
const monitor = global.yoho.monitorSender;
let client;
const timeout = 200; // redis 操作超时时间

try {
    client = redis.createClient(config.redis.connect);

    bluebird.promisifyAll(redis.RedisClient.prototype);
    bluebird.promisifyAll(redis.Multi.prototype);

    const monitorType = _.get(monitor, 'type.REDIS');

    client.all = args => {
        if (!client.ready) {
            if (Array.isArray(args)) {
                return Promise.resolve(_.fill(args, false));
            } else {
                return Promise.resolve(false);
            }
        }

        return client.multi.call(client, args).execAsync().timeout(timeout).then(res => {
            monitor && monitor.tallySuccess(monitorType);
            return res;
        }).catch((e)=>{
            monitor && monitor.tallyFail(monitorType, e);
            return false;
        });
    };

    client.on('error', function() {
        global.yoho.redis = '';
    });

    client.on('connect', function() {
        global.yoho.redis = client;
    });
} catch (e) {
    global.yoho.redis = '';
}



module.exports = client;