Index: src/wp-admin/includes/ajax-actions.php
===================================================================
--- src/wp-admin/includes/ajax-actions.php	(revision 27276)
+++ src/wp-admin/includes/ajax-actions.php	(working copy)
@@ -180,10 +180,8 @@ function wp_ajax_imgedit_preview() {
 }
 
 function wp_ajax_oembed_cache() {
-	global $wp_embed;
-
-	$return = ( $wp_embed->cache_oembed( $_GET['post'] ) ) ? '1' : '0';
-	wp_die( $return );
+	$GLOBALS['wp_embed']->cache_oembed( $_GET['post'] );
+	wp_die( 0 );
 }
 
 function wp_ajax_autocomplete_user() {
Index: src/wp-includes/class-wp-embed.php
===================================================================
--- src/wp-includes/class-wp-embed.php	(revision 27276)
+++ src/wp-includes/class-wp-embed.php	(working copy)
@@ -25,9 +25,6 @@ class WP_Embed {
 		// Attempts to embed all URLs in a post
 		add_filter( 'the_content', array( $this, 'autoembed' ), 8 );
 
-		// When a post is saved, invalidate the oEmbed cache
-		add_action( 'pre_post_update', array( $this, 'delete_oembed_caches' ) );
-
 		// After a post is saved, cache oEmbed items via AJAX
 		add_action( 'edit_form_advanced', array( $this, 'maybe_run_ajax_cache' ) );
 	}
@@ -72,8 +69,9 @@ class WP_Embed {
 	function maybe_run_ajax_cache() {
 		$post = get_post();
 
-		if ( ! $post || empty($_GET['message']) || 1 != $_GET['message'] )
+		if ( ! $post || empty( $_GET['message'] ) ) {
 			return;
+		}
 
 ?>
 <script type="text/javascript">
@@ -183,9 +181,8 @@ class WP_Embed {
 
 			// Check for a cached result (stored in the post meta)
 			$cachekey = '_oembed_' . md5( $url . serialize( $attr ) );
-			if ( $this->usecache ) {
-				$cache = get_post_meta( $post_ID, $cachekey, true );
-
+			$cache = get_post_meta( $post_ID, $cachekey, true );
+			if ( $this->usecache || 'publish' !== get_post_status( $post_ID ) ) {
 				// Failures are cached
 				if ( '{{unknown}}' === $cache )
 					return $this->maybe_make_link( $url );
@@ -219,8 +216,11 @@ class WP_Embed {
 			$html = wp_oembed_get( $url, $attr );
 
 			// Cache the result
-			$cache = ( $html ) ? $html : '{{unknown}}';
-			update_post_meta( $post_ID, $cachekey, $cache );
+			if ( $html ) {
+				update_post_meta( $post_ID, $cachekey, $html );
+			} elseif ( ! $cache ) {
+				update_post_meta( $post_ID, $cachekey, '{{unknown}}' );
+			}
 
 			// If there was a result, return it
 			if ( $html ) {
