diff --git a/core/modules/book/book.module b/core/modules/book/book.module
index fe6e06d..ad500ba 100644
--- a/core/modules/book/book.module
+++ b/core/modules/book/book.module
@@ -274,6 +274,7 @@ function book_node_insert(EntityInterface $node) {
   /** @var \Drupal\book\BookManagerInterface $book_manager */
   $book_manager = \Drupal::service('book.manager');
   $book_manager->updateOutline($node);
+  $book_manager->bookCacheDelete($node);
 }
 
 /**
@@ -283,6 +284,7 @@ function book_node_update(EntityInterface $node) {
   /** @var \Drupal\book\BookManagerInterface $book_manager */
   $book_manager = \Drupal::service('book.manager');
   $book_manager->updateOutline($node);
+  $book_manager->bookCacheDelete($node);
 }
 
 /**
@@ -293,6 +295,7 @@ function book_node_predelete(EntityInterface $node) {
     /** @var \Drupal\book\BookManagerInterface $book_manager */
     $book_manager = \Drupal::service('book.manager');
     $book_manager->deleteFromBook($node->book['nid']);
+    \Drupal::service('book.manager')->bookCacheDelete($node);
   }
 }
 
diff --git a/core/modules/book/src/BookManager.php b/core/modules/book/src/BookManager.php
index 3f5cfdc..86c0a1a 100644
--- a/core/modules/book/src/BookManager.php
+++ b/core/modules/book/src/BookManager.php
@@ -1061,4 +1061,17 @@ public function bookSubtreeData($link) {
     return $tree[$cid];
   }
 
+  public function bookGenerateCacheId($book) {
+    $mid = empty($book['plid']) ? $book['mlid'] : $book['plid'];
+    return 'links:' . $book['menu_name'] . ':subtree-cid:' . $mid;
+  }
+
+  public function bookCacheDelete($node) {
+    $cid = $this->bookGenerateCacheId($node->book);
+    $cache = cache('menu')->get($cid);
+    if (!empty($cache->data)) {
+      return cache('menu')->delete($cache->data);
+    }
+    return FALSE;
+  }
 }
