diff --git a/core/core.services.yml b/core/core.services.yml
index 0b18c3b..7ad2b4a 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -197,6 +197,9 @@ services:
   cache.backend.memory:
     class: Drupal\Core\Cache\MemoryBackendFactory
   # A special cache bin that does not persist beyond the length of the request.
+  cache.backend.null:
+    class: Drupal\Core\Cache\NullBackendFactory
+  # This bin provides no actual caching and serves as a backup for unconfigured or incorrectly configured cache
   cache.static:
     class: Drupal\Core\Cache\CacheBackendInterface
     tags:
diff --git a/core/lib/Drupal/Core/Cache/CacheFactory.php b/core/lib/Drupal/Core/Cache/CacheFactory.php
index d9b39e4..b1f6471 100644
--- a/core/lib/Drupal/Core/Cache/CacheFactory.php
+++ b/core/lib/Drupal/Core/Cache/CacheFactory.php
@@ -80,6 +80,12 @@ public function get($bin) {
       // Fall back to the database backend if nothing else is configured.
       $service_name = 'cache.backend.database';
     }
+
+    // Fall back to no caching if specified service is missing.
+    if (!$this->container->has($service_name)) {
+      $service_name = 'cache.backend.null';
+    }
+
     return $this->container->get($service_name)->get($bin);
   }
 
diff --git a/core/lib/Drupal/Core/Cache/ChainedFastBackendFactory.php b/core/lib/Drupal/Core/Cache/ChainedFastBackendFactory.php
index 00dc9b5..2fb9eb7 100644
--- a/core/lib/Drupal/Core/Cache/ChainedFastBackendFactory.php
+++ b/core/lib/Drupal/Core/Cache/ChainedFastBackendFactory.php
@@ -44,7 +44,7 @@ public function __construct(Settings $settings = NULL, $consistent_service_name
     // Default the consistent backend to the site's default backend.
     if (!isset($consistent_service_name)) {
       $cache_settings = isset($settings) ? $settings->get('cache') : array();
-      $consistent_service_name = isset($cache_settings['default']) ? $cache_settings['default'] : 'cache.backend.database';
+      $consistent_service_name = isset($cache_settings['default']) && \Drupal::hasService($cache_settings['default']) ? $cache_settings['default'] : 'cache.backend.null';
     }
 
     // Default the fast backend to APCu if it's available.
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 7db1eae..0faa49b 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -866,6 +866,19 @@ function system_requirements($phase) {
     }
   }

+  // Report missing cache implementation
+  if ($phase == 'runtime') {
+    $cache_settings = \Drupal::service('settings')->get('cache');
+    if (!is_null($cache_settings) && (!\Drupal::hasService($cache_settings['default']) || $cache_settings['default'] == 'cache.backend.null')) {
+      $requirements['cache'] = array(
+        'title' => t('Cache'),
+        'value' => $cache_settings['default'],
+        'description' => t('The default service for cache configuration does not exist or is null. Caching is disabled, which may cause significant performance issues.'),
+        'severity' => REQUIREMENT_ERROR,
+      );
+    }
+  }
+
   return $requirements;
 }