Index: wp-includes/bookmark.php
===================================================================
--- wp-includes/bookmark.php	(revision 18536)
+++ wp-includes/bookmark.php	(working copy)
@@ -105,6 +105,8 @@
  *		separated by commas.
  * 'exclude' - Default is empty string (string). Exclude other categories
  *		separated by commas.
+ * 'expiration' - Default is 600 (integer). Lifetime of result cache when ordering
+ *		by 'rand'
  *
  * @since 2.1.0
  * @uses $wpdb Database Object
@@ -121,17 +123,24 @@
 		'limit' => -1, 'category' => '',
 		'category_name' => '', 'hide_invisible' => 1,
 		'show_updated' => 0, 'include' => '',
-		'exclude' => '', 'search' => ''
+		'exclude' => '', 'search' => '',
+		'expiration' => 600
 	);
 
 	$r = wp_parse_args( $args, $defaults );
 	extract( $r, EXTR_SKIP );
-
+	
 	$cache = array();
 	$key = md5( serialize( $r ) );
 	if ( $cache = wp_cache_get( 'get_bookmarks', 'bookmark' ) ) {
-		if ( is_array($cache) && isset( $cache[ $key ] ) )
-			return apply_filters('get_bookmarks', $cache[ $key ], $r );
+		if ( is_array($cache) && isset( $cache[ $key ] ) ) {
+			if (	$orderby == 'rand' ) {
+				if ( is_array( $cache[ $key ] ) && isset( $cache[ $key ][ 'results' ] ) && isset( $cache[ $key ][ 'expires' ] ) &&   $cache[ $key ][ 'expires' ] > time() )
+					return apply_filters('get_bookmarks', $cache[ $key ][ 'results' ], $r );
+			} else {
+				return apply_filters('get_bookmarks', $cache[ $key ], $r );
+			}
+		}
 	}
 
 	if ( !is_array($cache) )
@@ -252,7 +261,11 @@
 
 	$results = $wpdb->get_results($query);
 
-	$cache[ $key ] = $results;
+	if(	$orderby == 'rand()' )
+		$cache[ $key ] = array(  'expires' => time() + $expiration, 'results' => $results );
+	else
+		$cache[ $key ] = $results;
+	
 	wp_cache_set( 'get_bookmarks', $cache, 'bookmark' );
 
 	return apply_filters('get_bookmarks', $results, $r);
