code: function Cache(opts) {
      this.assoc = opts.assoc;
      this.size = opts.size;
      if (opts.serialize !== undefined)
          this.serialize = opts.serialize;
      var algo = opts.algorithm || opts.evict || 'lru';
      this.algorithm = typeof algo == 'string'
                        ? algorithms[algo]
                        : algo;
  
      this.sets = new Array(this.size);
      this.stat = {
          hits: 0,
          misses: 0
      };
  }
docs: Associative Cache
  @param {Object} opts an object defining some cache behaviours with the following properties:
  assoc: cache associativity level
  size: the number of sets of items the cache can store (total number of items is assoc * size)
  serialize: function to convert the key to the string (json-stable-stringify is used if not passed)
  or false if serialised keys are used (strings or numbers)
  algorithm: eviction algorithm, can be defined as an object that has three functions:
  created: called when a slot is created (passed slot)
  accessed: called when a slot is accessed (passed slot)
  evict: called when a slot should be evicted (passed hash with slots)
  or as a name of the algorithm ('lru', 'mru', 'lfu', 'mfu' are defined).
  By default 'lru' is used.