code: void notifyConsumer(Map<String, ProviderGroup> newCache) {
          Map<String, ProviderGroup> oldCache = memoryCache;
          // 比较两个map的差异
          MapDifference<String, ProviderGroup> difference =
                  new MapDifference<String, ProviderGroup>(newCache, oldCache);
          // 新的有，旧的没有，通知
          Map<String, ProviderGroup> onlynew = difference.entriesOnlyOnLeft();
          for (Map.Entry<String, ProviderGroup> entry : onlynew.entrySet()) {
              notifyConsumerListeners(entry.getKey(), entry.getValue());
          }
          // 旧的有，新的没有，全部干掉
          Map<String, ProviderGroup> onlyold = difference.entriesOnlyOnRight();
          for (Map.Entry<String, ProviderGroup> entry : onlyold.entrySet()) {
              notifyConsumerListeners(entry.getKey(), new ProviderGroup());
          }
  
          // 新旧都有，而且有变化
          Map<String, ValueDifference<ProviderGroup>> changed = difference.entriesDiffering();
          for (Map.Entry<String, ValueDifference<ProviderGroup>> entry : changed.entrySet()) {
              if (LOGGER.isDebugEnabled()) {
                  LOGGER.debug("{} has differente", entry.getKey());
              }
              ValueDifference<ProviderGroup> differentValue = entry.getValue();
              ProviderGroup innew = differentValue.leftValue();
              if (LOGGER.isDebugEnabled()) {
                  LOGGER.debug("new(right) is {}", innew);
              }
              // 只通知变化部分内容
              notifyConsumerListeners(entry.getKey(), innew);
          }
      }
docs: Notify consumer.
  
  @param newCache the new cache