docs: function doMulti(connObj, cmds, callback) {
      if (!this.isConnected()) {
        return callback(thorin.error('REDIS.NOT_CONNECTED', 'Redis connection is not ready.', 500));
      }
      if (cmds.length === 0) return callback();
      // check commands first.
      for (let i = 0; i < cmds.length; i++) {
        let cmd = cmds[i][0];
        if (typeof connObj[cmd] !== 'function') {
          return callback(thorin.error('REDIS.COMMAND_NOT_FOUND', 'Invalid redis command:' + cmd, 500));
        }
      }
      var mObj = connObj.multi();
      cmds.forEach((item) => {
        let cmd = item.splice(0, 1)[0];
        mObj[cmd].apply(mObj, item);
        item.splice(0, 0, cmd);
      });
      this[connections].default.emit('multi', cmds);
      mObj.exec((err, results) => {
        if (err) {
          return callback(thorin.error('REDIS.MULTI', 'Redis transaction encountered an error.', err, 500));
        }
        let finalResults = [];
        for (let i = 0, len = results.length; i < len; i++) {
          let t = results[i];
          if (t[0] === null) {
            finalResults.push(t[1]);
          }
        }
        callback(null, finalResults);
      });
    }