code: function RedisStore(options) {
    if (!(this instanceof RedisStore)) {
      return new RedisStore(options);
    }
    var self = this,
        type,
        autoCast,
        delimiter = ':',
        client,
        pw,
        db;
    if (!options) {
      options = {};
    }
    // Set the delimiter property
    type = typeof options.delimiter;
    if ((type === 'string' && options.delimiter) || type === 'number') {
      delimiter = options.delimiter;
    }
    Object.defineProperty(this, 'delimiter', {
      value: delimiter,
      writable: false
    });
    // Set the automatic cast property
    autoCast = options.autoCast !== false;
    Object.defineProperty(this, 'autoCast', {
      value: autoCast,
      writable: false
    });
    // Create the Redis connection
    if (options.client) {
      client = options.client;
    } else {
      client = redis.createClient(options.port, options.host, options.options);
      pw = options.pw || options.pass || options.password;
      db = options.db || options.database;
      if (typeof db !== 'number') {
        if (typeof db === 'string') {
          db = parseInt(db, 10);
        }
      }
      if (db && typeof db !== 'number') {
        db = parseInt(db, 10);
      }
      if (!(typeof db === 'number' && !isNaN(db))) {
        db = null;
      }
      if (pw) {
        client.auth(pw, function() {
          if (typeof db === 'number' && !isNaN(db)) {
            client.select(db);
          }
        });
      } else if (typeof db === 'number' && !isNaN(db)) {
        client.select(db);
      }
    }
    Object.defineProperty(this, 'client', {
      value: client,
      writable: false
    });
    EventEmitter.call(this);
    ['ready', 'connect', 'end'].forEach(function(name) {
      client.on(name, function() {
        self.emit(name);
      });
    });
    client.on('error', function(error) {
      self.emit('error', error);
    });
  }
docs: Constructor
  
  @param {Object}  options Optional options object