@Override
 public void clear(String namespace, Collection<String> keys) {
   long startTime = System.currentTimeMillis();
   CacheStatistics stats = null;
   LOG.trace("clear(%s, %s)", namespace, keys);
   if (cacheStatistics != null) {
     stats = cacheStatistics.getCacheStatistics(namespace);
     stats.incrementClears(keys.size());
   }
   provider.clear(namespace, keys, stats);
   recordElapsedTime(
       stats, startTime, keys.size(), CacheOperation.CLEAR_KEYS, CacheOperation.CLEAR_OPERATIONS);
 }
 @Override
 public void set(String namespace, Collection<CacheStore<byte[]>> stores) {
   long startTime = System.currentTimeMillis();
   CacheStatistics stats = null;
   LOG.trace("set(%s, %s)", namespace, stores);
   if (cacheStatistics != null) {
     stats = cacheStatistics.getCacheStatistics(namespace);
     stats.incrementStores(stores.size());
   }
   provider.set(namespace, stores, stats);
   recordElapsedTime(
       stats,
       startTime,
       stores.size(),
       CacheOperation.STORE_KEYS,
       CacheOperation.STORE_OPERATIONS);
 }
 @Override
 public Map<String, byte[]> get(String namespace, Collection<String> keys) {
   long startTime = System.currentTimeMillis();
   CacheStatistics stats = null;
   if (cacheStatistics != null) {
     stats = cacheStatistics.getCacheStatistics(namespace);
     stats.incrementFetches(keys.size());
   }
   Map<String, byte[]> result = provider.get(namespace, keys, stats);
   if (stats != null) {
     stats.incrementHits(result.size());
   }
   recordElapsedTime(
       stats, startTime, keys.size(), CacheOperation.FETCH_KEYS, CacheOperation.FETCH_OPERATIONS);
   LOG.trace("get(%s, %s) hit %d", namespace, keys, result.size());
   return result;
 }