diff --git a/core/lib/Drupal/Core/Cache/CacheBackendInterface.php b/core/lib/Drupal/Core/Cache/CacheBackendInterface.php
index 9c4f8fc..a251116 100644
--- a/core/lib/Drupal/Core/Cache/CacheBackendInterface.php
+++ b/core/lib/Drupal/Core/Cache/CacheBackendInterface.php
@@ -114,6 +114,26 @@ public function getMultiple(&$cids);
   public function set($cid, $data, $expire = CacheBackendInterface::CACHE_PERMANENT, array $tags = array());
 
   /**
+   * Store multiple items in the persistent cache.
+   *
+   * @param $items
+   *   An array of cache items in the form:
+   *   @code
+   *   $items = array(
+   *     $cid => array(
+   *       // Required, will be automatically serialized if not a string.
+   *       'data' => $data,
+   *       // Optional, defaults to CacheBackendInterface::CACHE_PERMANENT.
+   *       'expire' => CacheBackendInterface::CACHE_PERMANENT,
+   *       // (optional) The cache tags for this item, see CacheBackendInterface::set().
+   *       'tags' => array(),
+   *     ),
+   *   );
+   *   @endcode
+   */
+  function setMultiple(array $items);
+
+  /**
    * Deletes an item from the cache.
    *
    * @param $cid
diff --git a/core/lib/Drupal/Core/Cache/DatabaseBackend.php b/core/lib/Drupal/Core/Cache/DatabaseBackend.php
index 9ab6b11..981dc9d 100644
--- a/core/lib/Drupal/Core/Cache/DatabaseBackend.php
+++ b/core/lib/Drupal/Core/Cache/DatabaseBackend.php
@@ -145,6 +145,32 @@ public function set($cid, $data, $expire = CacheBackendInterface::CACHE_PERMANEN
   }
 
   /**
+   * Implements Drupal\Core\Cache\CacheBackendInterface::setMultiple().
+   */
+  function setMultiple(array $items) {
+    try {
+      $this->deleteMultiple(array_keys($items));
+      $query = Database::getConnection()->insert($this->bin)->fields(array('cid', 'data', 'expire', 'created', 'serialized', 'tags', 'checksum'));
+      foreach ($items as $cid => $item) {
+        $fields = array(
+          'cid' => $cid,
+          'data' => is_string($item['data']) ? $item['data'] : serialize($item['data']),
+          'expire' => isset($item['expire']) ? $item['expire'] : CacheBackendInterface::CACHE_PERMANENT,
+          'created' => REQUEST_TIME,
+          'serialized' => is_string($item['data']) ? 0 : 1,
+          'tags' => isset($item['tags']) ? implode(' ', $this->flattenTags($item['tags'])) : '',
+          'checksum' => $this->checksumTags(isset($item['tags']) ? $item['tags'] : array()),
+        );
+        $query->values($fields);
+      }
+      $query->execute();
+    }
+    catch (Exception $e) {
+      // The database may not be available, so we'll ignore errors.
+     }
+  }
+
+  /**
    * Implements Drupal\Core\Cache\CacheBackendInterface::delete().
    */
   public function delete($cid) {
diff --git a/core/lib/Drupal/Core/Cache/InstallBackend.php b/core/lib/Drupal/Core/Cache/InstallBackend.php
index e23294a..476822a 100644
--- a/core/lib/Drupal/Core/Cache/InstallBackend.php
+++ b/core/lib/Drupal/Core/Cache/InstallBackend.php
@@ -53,6 +53,11 @@ public function getMultiple(&$cids) {
   public function set($cid, $data, $expire = CacheBackendInterface::CACHE_PERMANENT, array $tags = array()) {}
 
   /**
+   * Overrides Drupal\Core\Cache\DatabaseBackend::setMultiple().
+   */
+  function setMultiple(array $items = array()) {}
+
+  /**
    * Overrides Drupal\Core\Cache\DatabaseBackend::delete().
    */
   public function delete($cid) {
diff --git a/core/lib/Drupal/Core/Cache/MemoryBackend.php b/core/lib/Drupal/Core/Cache/MemoryBackend.php
index b17e06b..d7bb718 100644
--- a/core/lib/Drupal/Core/Cache/MemoryBackend.php
+++ b/core/lib/Drupal/Core/Cache/MemoryBackend.php
@@ -106,6 +106,15 @@ public function set($cid, $data, $expire = CacheBackendInterface::CACHE_PERMANEN
   }
 
   /**
+   * Implements Drupal\Core\Cache\CacheBackendInterface::setMultiple().
+   */
+  public function setMultiple(array $items = array()) {
+    foreach ($items as $cid => $item) {
+      $this->set($cid, $item['data'], isset($item['expire']) ? $item['expire'] : CacheBackendInterface::CACHE_PERMANENT, isset($item['tags']) ? $item['tags'] : array());
+    }
+  }
+
+  /**
    * Calculates a checksum so data can be invalidated using tags.
    */
   public function checksum($tags) {
diff --git a/core/lib/Drupal/Core/Cache/NullBackend.php b/core/lib/Drupal/Core/Cache/NullBackend.php
index ee8b1d3..98c7264 100644
--- a/core/lib/Drupal/Core/Cache/NullBackend.php
+++ b/core/lib/Drupal/Core/Cache/NullBackend.php
@@ -45,6 +45,11 @@ public function getMultiple(&$cids) {
   public function set($cid, $data, $expire = CacheBackendInterface::CACHE_PERMANENT, array $tags = array()) {}
 
   /**
+   * Implements Drupal\Core\Cache\CacheBackendInterface::setMultiple().
+   */
+  function setMultiple(array $items = array()) {}
+
+  /**
    * Implements Drupal\Core\Cache\CacheBackendInterface::delete().
    */
   public function delete($cid) {}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Cache/GenericCacheBackendUnitTestBase.php b/core/modules/system/lib/Drupal/system/Tests/Cache/GenericCacheBackendUnitTestBase.php
index 95805d7..c692c54 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Cache/GenericCacheBackendUnitTestBase.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Cache/GenericCacheBackendUnitTestBase.php
@@ -282,6 +282,25 @@ public function testGetMultiple() {
     $this->assertFalse(in_array('test19', $cids), "Added cache id test19 is not in cids array.");
   }
 
+   /**
+   * Test Drupal\Core\Cache\CacheBackendInterface::setMultiple().
+   */
+  public function testSetMultiple() {
+    $backend = $this->getCacheBackend();
+
+    // Set numerous testing keys.
+    $backend->set('cid_1', 'Some other value');
+    $items = array(
+      'cid_1' => array('data' => 1),
+      'cid_2' => array('data' => 2),
+    );
+    $backend->setMultiple($items);
+    $cids = array_keys($items);
+    $cached = $backend->getMultiple($cids);
+    $this->assertEqual($cached['cid_1']->data, $items['cid_1']['data'], 'Over-written cache item set correctly.');
+    $this->assertEqual($cached['cid_2']->data, $items['cid_2']['data'], 'New cache item set correctly.');
+  }
+
   /**
    * Tests Drupal\Core\Cache\CacheBackendInterface::isEmpty().
    */
