docs: function Database(store, opts) {
    opts = opts || {};
  
    // the store that holds this database
    this._store = store;
  
    // do not coerce values to strings
    this.raw = opts.raw !== undefined ? opts.raw : true;
  
    // pattern matcher
    this.pattern = opts.pattern || new Pattern();
  
    this.options = opts;
  
    // set up initial state
    this.flushdb();
  
    if(store) {
      // proxy via the store so the server
      // can get statistics across all databases
      this.on('expired', function onExpired(key) {
        store.emit('expired', key);
      })
  
      this.on('hit', function onHit(key) {
        store.emit('hit', key);
      })
  
      this.on('miss', function onMiss(key) {
        store.emit('miss', key);
      })
    }
  }