Index: src/bp-notifications/bp-notifications-functions.php
===================================================================
--- src/bp-notifications/bp-notifications-functions.php
+++ src/bp-notifications/bp-notifications-functions.php
@@ -701,7 +701,7 @@
 
 	add_filter( 'query', 'bp_filter_metaid_column_name' );
 	foreach ( $keys as $key ) {
-		$retval = delete_metadata( 'notifications', $notification_id, $key, $meta_value, $delete_all );
+		$retval = delete_metadata( 'notification', $notification_id, $key, $meta_value, $delete_all );
 	}
 	remove_filter( 'query', 'bp_filter_metaid_column_name' );
 
@@ -726,7 +726,7 @@
  */
 function bp_notifications_get_meta( $notification_id = 0, $meta_key = '', $single = true ) {
 	add_filter( 'query', 'bp_filter_metaid_column_name' );
-	$retval = get_metadata( 'notifications', $notification_id, $meta_key, $single );
+	$retval = get_metadata( 'notification', $notification_id, $meta_key, $single );
 	remove_filter( 'query', 'bp_filter_metaid_column_name' );
 
 	/**
@@ -761,7 +761,7 @@
  */
 function bp_notifications_update_meta( $notification_id, $meta_key, $meta_value, $prev_value = '' ) {
 	add_filter( 'query', 'bp_filter_metaid_column_name' );
-	$retval = update_metadata( 'notifications', $notification_id, $meta_key, $meta_value, $prev_value );
+	$retval = update_metadata( 'notification', $notification_id, $meta_key, $meta_value, $prev_value );
 	remove_filter( 'query', 'bp_filter_metaid_column_name' );
 
 	return $retval;
@@ -782,7 +782,7 @@
  */
 function bp_notifications_add_meta( $notification_id, $meta_key, $meta_value, $unique = false ) {
 	add_filter( 'query', 'bp_filter_metaid_column_name' );
-	$retval = add_metadata( 'notifications', $notification_id, $meta_key, $meta_value, $unique );
+	$retval = add_metadata( 'notification', $notification_id, $meta_key, $meta_value, $unique );
 	remove_filter( 'query', 'bp_filter_metaid_column_name' );
 
 	return $retval;
Index: src/bp-notifications/classes/class-bp-notifications-component.php
===================================================================
--- src/bp-notifications/classes/class-bp-notifications-component.php
+++ src/bp-notifications/classes/class-bp-notifications-component.php
@@ -82,6 +82,11 @@
 			'table_name_meta' => $bp->table_prefix . 'bp_notifications_meta',
 		);
 
+		// Metadata tables for notifications component.
+		$meta_tables = array(
+			'notification' => $bp->table_prefix . 'bp_notifications_meta',
+		);
+
 		// All globals for the notifications component.
 		// Note that global_tables is included in this array.
 		$args = array(
@@ -89,6 +94,7 @@
 			'has_directory' => false,
 			'search_string' => __( 'Search Notifications...', 'buddypress' ),
 			'global_tables' => $global_tables,
+			'meta_tables'   => $meta_tables
 		);
 
 		parent::setup_globals( $args );
Index: src/bp-notifications/classes/class-bp-notifications-notification.php
===================================================================
--- src/bp-notifications/classes/class-bp-notifications-notification.php
+++ src/bp-notifications/classes/class-bp-notifications-notification.php
@@ -629,6 +629,10 @@
 	 *                                           false (no pagination - all items).
 	 *     @type int          $per_page          Number of items to show per page. Default:
 	 *                                           false (no pagination - all items).
+	 *     @type array        $meta_query        Array of meta_query conditions. See WP_Meta_Query::queries.
+	 *     @type array        $date_query        Array of date_query conditions. See first parameter of
+	 *                                           WP_Date_Query::__construct().
+	 *     @type bool         $update_meta_cache Whether to update meta cache. Default: true.
 	 * }
 	 * @return array Located notifications.
 	 */
@@ -681,7 +685,14 @@
 		// Concatenate query parts.
 		$sql = "{$select_sql} {$from_sql} {$join_sql} {$where_sql} {$order_sql} {$pag_sql}";
 
-		return $wpdb->get_results( $sql );
+		$results = $wpdb->get_results( $sql );
+
+		// Update meta cache.
+		if ( true === $r['update_meta_cache'] ) {
+			bp_notifications_update_meta_cache( wp_list_pluck( $results, 'id' ) );
+		}
+
+		return $results;
 	}
 
 	/**
Index: tests/phpunit/testcases/notifications/functions.php
===================================================================
--- tests/phpunit/testcases/notifications/functions.php
+++ tests/phpunit/testcases/notifications/functions.php
@@ -124,6 +124,60 @@
 	}
 
 	/**
+	 * @group bp_notifications_update_meta_cache
+	 */
+	public function test_bp_notifications_update_meta_cache() {
+		$u = $this->factory->user->create();
+
+		$n1 = $this->factory->notification->create( array(
+			'component_name' => 'messages',
+			'user_id'        => $u
+		) );
+
+		$n2 = $this->factory->notification->create( array(
+			'component_name' => 'groups',
+			'user_id'        => $u
+		) );
+
+		// Add cache for each notification.
+		bp_notifications_update_meta( $n1, 'meta', 'data' );
+		bp_notifications_update_meta( $n1, 'data', 'meta' );
+		bp_notifications_update_meta( $n2, 'meta', 'human' );
+
+		// Prime cache.
+		bp_notifications_get_meta( $n1, 'meta' );
+
+		// Ensure an empty cache for second notification.
+		wp_cache_delete( $n2, 'notification_meta' );
+
+		// Update notification meta cache.
+		bp_notifications_update_meta_cache( array( $n1, $n2 ) );
+
+		$expected = array(
+			$n1 => array(
+				'meta' => array(
+					'data',
+				),
+				'data' => array(
+					'meta',
+				),
+			),
+			$n2 => array(
+				'meta' => array(
+					'human',
+				),
+			),
+		);
+
+		$found = array(
+			$n1 => wp_cache_get( $n1, 'notification_meta' ),
+			$n2 => wp_cache_get( $n2, 'notification_meta' ),
+		);
+
+		$this->assertEquals( $expected, $found );
+	}
+
+	/**
 	 * @group bp_notifications_add_notification
 	 */
 	public function test_bp_notifications_add_notification_no_dupes() {
