From a3f3c5c95911a5d850a4eab9f90f6e27394d65cd Mon Sep 17 00:00:00 2001 From: spacedmonkey Date: Fri, 11 Feb 2022 12:51:59 +0000 Subject: [PATCH] Cache: Add `wp_cache_*_multiple` functions. Add new caching functions named `wp_cache_add_multiple`, `wp_cache_set_multiple` and `wp_cache_delete_multiple`. All of these functions allow for an array of data to be passed, so that multiple cache objects can be created / edited / deleted in a single function call. This follows on from [47938] where the `wp_cache_get_multiple` function was introduced and allowed for multiple cache objects to be received in one call. Props: spacedmonkey, tillkruess, adamsilverstein, flixos90, mitogh, pbearne. Fixes: #54574. Built from https://develop.svn.wordpress.org/trunk@52700 git-svn-id: http://core.svn.wordpress.org/trunk@52289 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/cache-compat.php | 83 +++++++++++++++++++++++++++ wp-includes/cache.php | 59 +++++++++++++++++++ wp-includes/class-wp-object-cache.php | 59 +++++++++++++++++++ wp-includes/version.php | 2 +- 4 files changed, 202 insertions(+), 1 deletion(-) diff --git a/wp-includes/cache-compat.php b/wp-includes/cache-compat.php index d25017f2a1..3f3df630e9 100644 --- a/wp-includes/cache-compat.php +++ b/wp-includes/cache-compat.php @@ -35,3 +35,86 @@ if ( ! function_exists( 'wp_cache_get_multiple' ) ) : return $values; } endif; + +if ( ! function_exists( 'wp_cache_delete_multiple' ) ) : + /** + * Delete multiple values from the cache in one call. + * + * Compat function to mimic wp_cache_delete_multiple(). + * + * @ignore + * @since 6.0.0 + * + * @see wp_cache_delete_multiple() + * + * @param array $keys Array of keys under which the cache to deleted. + * @param string $group Optional. Where the cache contents are grouped. Default empty. + * @return array Array of return values. + */ + function wp_cache_delete_multiple( array $keys, $group = '' ) { + $values = array(); + + foreach ( $keys as $key ) { + $values[ $key ] = wp_cache_delete( $key, $group ); + } + + return $values; + } +endif; + + +if ( ! function_exists( 'wp_cache_add_multiple' ) ) : + /** + * Add multiple values to the cache in one call, if the cache keys doesn't already exist. + * + * Compat function to mimic wp_cache_add_multiple(). + * + * @ignore + * @since 6.0.0 + * + * @see wp_cache_add_multiple() + * + * @param array $data Array of key and value to be added. + * @param string $group Optional. Where the cache contents are grouped. Default empty. + * @param int $expire Optional. When to expire the cache contents, in seconds. Default 0 (no expiration). + * @return array Array of return values. + */ + function wp_cache_add_multiple( array $data, $group = '', $expire = 0 ) { + $values = array(); + + foreach ( $data as $key => $value ) { + $values[ $key ] = wp_cache_add( $key, $value, $group, $expire ); + } + + return $values; + } +endif; + +if ( ! function_exists( 'wp_cache_set_multiple' ) ) : + /** + * Set multiple values to the cache in one call. + * + * Differs from wp_cache_add_multiple() in that it will always write data. + * + * Compat function to mimic wp_cache_set_multiple(). + * + * @ignore + * @since 6.0.0 + * + * @see wp_cache_set_multiple() + * + * @param array $data Array of key and value to be set. + * @param string $group Optional. Where the cache contents are grouped. Default empty. + * @param int $expire Optional. When to expire the cache contents, in seconds. Default 0 (no expiration). + * @return array Array of return values. + */ + function wp_cache_set_multiple( array $data, $group = '', $expire = 0 ) { + $values = array(); + + foreach ( $data as $key => $value ) { + $values[ $key ] = wp_cache_set( $key, $value, $group, $expire ); + } + + return $values; + } +endif; diff --git a/wp-includes/cache.php b/wp-includes/cache.php index 7fa44ca9db..b9ffe96219 100644 --- a/wp-includes/cache.php +++ b/wp-includes/cache.php @@ -145,6 +145,65 @@ function wp_cache_get_multiple( $keys, $group = '', $force = false ) { return $wp_object_cache->get_multiple( $keys, $group, $force ); } + +/** + * Delete multiple values from the cache in one call. + * + * @since 6.0.0 + * + * @see WP_Object_Cache::delete_multiple() + * @global WP_Object_Cache $wp_object_cache Object cache global instance. + * + * @param array $keys Array of keys under which the cache to deleted. + * @param string $group Optional. Where the cache contents are grouped. Default empty. + * @return array Array of return values organized into groups. + */ +function wp_cache_delete_multiple( array $keys, $group = '' ) { + global $wp_object_cache; + + return $wp_object_cache->delete_multiple( $keys, $group ); +} + +/** + * Add multiple values to the cache in one call. + * + * @since 6.0.0 + * + * @see WP_Object_Cache::add_multiple() + * @global WP_Object_Cache $wp_object_cache Object cache global instance. + * + * @param array $data Array of key and value to be set. + * @param string $group Optional. Where the cache contents are grouped. Default empty. + * @param int $expire Optional. When to expire the cache contents, in seconds. + * Default 0 (no expiration). + * @return array Array of return values. + */ +function wp_cache_add_multiple( array $data, $group = '', $expire = 0 ) { + global $wp_object_cache; + + return $wp_object_cache->add_multiple( $data, $group, $expire ); +} + +/** + * Set multiple values to the cache in one call. + * + * @since 6.0.0 + * + * @see WP_Object_Cache::set_multiple() + * @global WP_Object_Cache $wp_object_cache Object cache global instance. + * + * @param array $data Array of key and value to be set. + * @param string $group Optional. Where the cache contents are grouped. Default empty. + * @param int $expire Optional. When to expire the cache contents, in seconds. + * Default 0 (no expiration). + * @return array Array of return values. + */ +function wp_cache_set_multiple( array $data, $group = '', $expire = 0 ) { + global $wp_object_cache; + + return $wp_object_cache->set_multiple( $data, $group, $expire ); +} + /** * Increment numeric cache item's value * diff --git a/wp-includes/class-wp-object-cache.php b/wp-includes/class-wp-object-cache.php index 37c474c3c5..920ec5e4da 100644 --- a/wp-includes/class-wp-object-cache.php +++ b/wp-includes/class-wp-object-cache.php @@ -323,6 +323,65 @@ class WP_Object_Cache { return $values; } + /** + * Delete multiple values from the cache in one call. + * + * @since 6.0.0 + * + * @param array $keys Array of keys to be deleted. + * @param string $group Optional. Where the cache contents are grouped. Default empty. + * @return array Array of return values. + */ + public function delete_multiple( array $keys, $group = '' ) { + $values = array(); + + foreach ( $keys as $key ) { + $values[ $key ] = $this->delete( $key, $group ); + } + + return $values; + } + + /** + * Add multiple values to the cache in one call. + * + * @since 6.0.0 + * + * @param array $data Array of key and value to be added. + * @param string $group Optional. Where the cache contents are grouped. Default empty. + * @param int $expire Optional. When to expire the cache contents, in seconds. Default 0 (no expiration). + * @return array Array of return values. + */ + public function add_multiple( array $data, $group = '', $expire = 0 ) { + $values = array(); + + foreach ( $data as $key => $value ) { + $values[ $key ] = $this->add( $key, $value, $group, $expire ); + } + + return $values; + } + + /** + * Set multiple values to the cache in one call. + * + * @since 6.0.0 + * + * @param array $data Array of key and value to be set. + * @param string $group Optional. Where the cache contents are grouped. Default empty. + * @param int $expire Optional. When to expire the cache contents, in seconds. Default 0 (no expiration). + * @return array Array of return values. + */ + public function set_multiple( array $data, $group = '', $expire = 0 ) { + $values = array(); + + foreach ( $data as $key => $value ) { + $values[ $key ] = $this->set( $key, $value, $group, $expire ); + } + + return $values; + } + /** * Increments numeric cache item's value. * diff --git a/wp-includes/version.php b/wp-includes/version.php index 157726951f..edcadd7361 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.0-alpha-52699'; +$wp_version = '6.0-alpha-52700'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.