Index: src/wp-includes/bookmark.php
===================================================================
--- src/wp-includes/bookmark.php	(revision 31298)
+++ src/wp-includes/bookmark.php	(working copy)
@@ -118,17 +118,27 @@
 	global $wpdb;
 
 	$defaults = array(
-		'orderby' => 'name', 'order' => 'ASC',
-		'limit' => -1, 'category' => '',
-		'category_name' => '', 'hide_invisible' => 1,
-		'show_updated' => 0, 'include' => '',
-		'exclude' => '', 'search' => ''
+		'orderby'        => 'name', 
+		'order'          => 'ASC',
+		'limit'          => -1, 
+		'category'       => '',
+		'category_name'  => '', 
+		'hide_invisible' => 1,
+		'show_updated'   => 0, 
+		'include'        => '',
+		'exclude'        => '', 
+		'search'         => '',
+		'expire'         => 60
 	);
 
 	$r = wp_parse_args( $args, $defaults );
 
 	$key = md5( serialize( $r ) );
-	if ( $cache = wp_cache_get( 'get_bookmarks', 'bookmark' ) ) {
+	if ( 'rand' == $orderby ) { 
+		if ( $results = wp_cache_get( $key, 'get_bookmarks_rand' ) ) {
+			return apply_filters( 'get_bookmarks', $results, $r ); 
+		}
+	} elseif ( $cache = wp_cache_get( 'get_bookmarks', 'bookmark' ) ) {
 		if ( is_array( $cache ) && isset( $cache[ $key ] ) ) {
 			$bookmarks = $cache[ $key ];
 			/**
@@ -285,8 +295,12 @@
 
 	$results = $wpdb->get_results( $query );
 
-	$cache[ $key ] = $results;
-	wp_cache_set( 'get_bookmarks', $cache, 'bookmark' );
+	if ( 'rand()' == $orderby ) { 
+		wp_cache_set( $key, $results, 'get_bookmarks_rand', $expire ); 
+	} else { 
+		$cache[$key] = $results; 
+		wp_cache_set( 'get_bookmarks', $cache, 'bookmark' ); 
+	}
 
 	/** This filter is documented in wp-includes/bookmark.php */
 	return apply_filters( 'get_bookmarks', $results, $r );
