class HeapCache extends AbstractSearchableCache<K, V> {

  @Override
  public V get(final K key) {
    V value = caffeine.getIfPresent(key);
    if (value != null) {
      stats.incrementHitCount();
      return value;
    }
    stats.incrementMissCount();
    //Explicitly not locking at the cost of loading item once more
    if (cacheLoader != null) {
      value = cacheLoader.load(key);
      if (value != null) {
        this.put(key, value);
        stats.incrementLoadCount();
        return value;
      }
    }
    return null;
  }

  public  HeapCache(final String name, final CacheLoader<K, V> cacheLoader,
      final EvictionListener<K, V> evictionListener, final IndexHandler<K, V> indexHandler,
      final long limit, final TimeUnit expiryUnit, final long expiry);

}