Cacheable dependencies got introduced in drupal 8 and provides great power over your caching. I recently found out that you can add "cacheable dependencies" to your render arrays like in the snippet below. It will only get cleared if the configuration changes. That's quite a great win, actually!
public function build() { $config = \Drupal::config('system.site'); $build = [ '#markup' => $config->get('name'), ]; $renderer = \Drupal::service('renderer'); $renderer->addCacheableDependency($build, $config); return $build; }
More about cacheability of render arrays.