Index: wp-includes/taxonomy.php
===================================================================
--- wp-includes/taxonomy.php	(revision 29856)
+++ wp-includes/taxonomy.php	(working copy)
@@ -1555,6 +1555,31 @@
 
 	$query = "SELECT $fields FROM $wpdb->terms AS t $join WHERE $where $orderby $order $limits";
 
+	// $args can be whatever, only use the args defined in defaults to compute the key
+	$filter_key = ( has_filter('list_terms_exclusions') ) ? serialize($GLOBALS['wp_filter']['list_terms_exclusions']) : '';
+	$key = md5( $query . $filter_key );
+	$last_changed = wp_cache_get( 'last_changed', 'terms' );
+	if ( ! $last_changed ) {
+		$last_changed = microtime();
+		wp_cache_set( 'last_changed', $last_changed, 'terms' );
+	}
+	$cache_key = "get_terms:$key:$last_changed";
+	$cache = wp_cache_get( $cache_key, 'terms' );
+	if ( false !== $cache ) {
+
+		/**
+		 * Filter the given taxonomy's terms cache.
+		 *
+		 * @since 2.3.0
+		 *
+		 * @param array        $cache      Cached array of terms for the given taxonomy.
+		 * @param string|array $taxonomies A taxonomy or array of taxonomies.
+		 * @param array        $args       An array of arguments to get terms.
+		 */
+		$cache = apply_filters( 'get_terms', $cache, $taxonomies, $args );
+		return $cache;
+	}
+
 	if ( 'count' == $_fields ) {
 		$term_count = $wpdb->get_var($query);
 		return $term_count;
