Merge pull request #24961 from woocommerce/fix/admin-caching-incr

Changed wp_cache invalidation from using increment to using microtime.
This commit is contained in:
Rodrigo Primo 2019-12-02 15:32:17 -03:00 committed by GitHub
commit 86f59dff09
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 45 additions and 34 deletions

View File

@ -128,7 +128,7 @@ class WC_Settings_Tax extends WC_Settings_Page {
} }
// Invalidate caches. // Invalidate caches.
WC_Cache_Helper::incr_cache_prefix( 'taxes' ); WC_Cache_Helper::invalidate_cache_group( 'taxes' );
WC_Cache_Helper::get_transient_version( 'shipping', true ); WC_Cache_Helper::get_transient_version( 'shipping', true );
// phpcs:enable WordPress.Security.NonceVerification.NoNonceVerification // phpcs:enable WordPress.Security.NonceVerification.NoNonceVerification
} }

View File

@ -2603,7 +2603,7 @@ class WC_AJAX {
} }
} }
WC_Cache_Helper::incr_cache_prefix( 'taxes' ); WC_Cache_Helper::invalidate_cache_group( 'taxes' );
WC_Cache_Helper::get_transient_version( 'shipping', true ); WC_Cache_Helper::get_transient_version( 'shipping', true );
wp_send_json_success( wp_send_json_success(

View File

@ -94,7 +94,7 @@ class WC_Cache_Helper {
$prefix = wp_cache_get( 'wc_' . $group . '_cache_prefix', $group ); $prefix = wp_cache_get( 'wc_' . $group . '_cache_prefix', $group );
if ( false === $prefix ) { if ( false === $prefix ) {
$prefix = 1; $prefix = microtime();
wp_cache_set( 'wc_' . $group . '_cache_prefix', $prefix, $group ); wp_cache_set( 'wc_' . $group . '_cache_prefix', $prefix, $group );
} }
@ -107,7 +107,18 @@ class WC_Cache_Helper {
* @param string $group Group of cache to clear. * @param string $group Group of cache to clear.
*/ */
public static function incr_cache_prefix( $group ) { public static function incr_cache_prefix( $group ) {
wp_cache_incr( 'wc_' . $group . '_cache_prefix', 1, $group ); wc_deprecated_function( 'WC_Cache_Helper::incr_cache_prefix', '3.9.0', 'WC_Cache_Helper::invalidate_cache_group' );
self::invalidate_cache_group( $group );
}
/**
* Invalidate cache group.
*
* @param string $group Group of cache to clear.
* @since 3.9.0
*/
public static function invalidate_cache_group( $group ) {
wp_cache_set( 'wc_' . $group . '_cache_prefix', microtime(), $group );
} }
/** /**

View File

@ -462,7 +462,7 @@ class WC_Post_Data {
* @param string $meta_value Meta value. * @param string $meta_value Meta value.
*/ */
public static function flush_object_meta_cache( $meta_id, $object_id, $meta_key, $meta_value ) { public static function flush_object_meta_cache( $meta_id, $object_id, $meta_key, $meta_value ) {
WC_Cache_Helper::incr_cache_prefix( 'object_' . $object_id ); WC_Cache_Helper::invalidate_cache_group( 'object_' . $object_id );
} }
/** /**

View File

@ -302,7 +302,7 @@ class WC_Session_Handler extends WC_Session {
$wpdb->query( $wpdb->prepare( "DELETE FROM $this->_table WHERE session_expiry < %d", time() ) ); // @codingStandardsIgnoreLine. $wpdb->query( $wpdb->prepare( "DELETE FROM $this->_table WHERE session_expiry < %d", time() ) ); // @codingStandardsIgnoreLine.
if ( class_exists( 'WC_Cache_Helper' ) ) { if ( class_exists( 'WC_Cache_Helper' ) ) {
WC_Cache_Helper::incr_cache_prefix( WC_SESSION_CACHE_GROUP ); WC_Cache_Helper::invalidate_cache_group( WC_SESSION_CACHE_GROUP );
} }
} }

View File

@ -907,7 +907,7 @@ class WC_Tax {
} }
wp_cache_delete( 'tax-rate-classes', 'taxes' ); wp_cache_delete( 'tax-rate-classes', 'taxes' );
WC_Cache_Helper::incr_cache_prefix( 'taxes' ); WC_Cache_Helper::invalidate_cache_group( 'taxes' );
return (bool) $delete; return (bool) $delete;
} }
@ -1025,7 +1025,7 @@ class WC_Tax {
$tax_rate_id = $wpdb->insert_id; $tax_rate_id = $wpdb->insert_id;
WC_Cache_Helper::incr_cache_prefix( 'taxes' ); WC_Cache_Helper::invalidate_cache_group( 'taxes' );
do_action( 'woocommerce_tax_rate_added', $tax_rate_id, $tax_rate ); do_action( 'woocommerce_tax_rate_added', $tax_rate_id, $tax_rate );
@ -1082,7 +1082,7 @@ class WC_Tax {
) )
); );
WC_Cache_Helper::incr_cache_prefix( 'taxes' ); WC_Cache_Helper::invalidate_cache_group( 'taxes' );
do_action( 'woocommerce_tax_rate_updated', $tax_rate_id, $tax_rate ); do_action( 'woocommerce_tax_rate_updated', $tax_rate_id, $tax_rate );
} }
@ -1101,7 +1101,7 @@ class WC_Tax {
$wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}woocommerce_tax_rate_locations WHERE tax_rate_id = %d;", $tax_rate_id ) ); $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}woocommerce_tax_rate_locations WHERE tax_rate_id = %d;", $tax_rate_id ) );
$wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}woocommerce_tax_rates WHERE tax_rate_id = %d;", $tax_rate_id ) ); $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}woocommerce_tax_rates WHERE tax_rate_id = %d;", $tax_rate_id ) );
WC_Cache_Helper::incr_cache_prefix( 'taxes' ); WC_Cache_Helper::invalidate_cache_group( 'taxes' );
do_action( 'woocommerce_tax_rate_deleted', $tax_rate_id ); do_action( 'woocommerce_tax_rate_deleted', $tax_rate_id );
} }
@ -1176,7 +1176,7 @@ class WC_Tax {
$wpdb->query( "INSERT INTO {$wpdb->prefix}woocommerce_tax_rate_locations ( location_code, tax_rate_id, location_type ) VALUES $sql;" ); // @codingStandardsIgnoreLine. $wpdb->query( "INSERT INTO {$wpdb->prefix}woocommerce_tax_rate_locations ( location_code, tax_rate_id, location_type ) VALUES $sql;" ); // @codingStandardsIgnoreLine.
} }
WC_Cache_Helper::incr_cache_prefix( 'taxes' ); WC_Cache_Helper::invalidate_cache_group( 'taxes' );
} }
/** /**

View File

@ -842,10 +842,10 @@ class WC_Product_Data_Store_CPT extends WC_Data_Store_WP implements WC_Object_Da
wc_delete_product_transients( $product->get_id() ); wc_delete_product_transients( $product->get_id() );
if ( $product->get_parent_id( 'edit' ) ) { if ( $product->get_parent_id( 'edit' ) ) {
wc_delete_product_transients( $product->get_parent_id( 'edit' ) ); wc_delete_product_transients( $product->get_parent_id( 'edit' ) );
WC_Cache_Helper::incr_cache_prefix( 'product_' . $product->get_parent_id( 'edit' ) ); WC_Cache_Helper::invalidate_cache_group( 'product_' . $product->get_parent_id( 'edit' ) );
} }
WC_Cache_Helper::invalidate_attribute_count( array_keys( $product->get_attributes() ) ); WC_Cache_Helper::invalidate_attribute_count( array_keys( $product->get_attributes() ) );
WC_Cache_Helper::incr_cache_prefix( 'product_' . $product->get_id() ); WC_Cache_Helper::invalidate_cache_group( 'product_' . $product->get_id() );
} }
/* /*

View File

@ -35,7 +35,7 @@ class WC_Shipping_Zone_Data_Store extends WC_Data_Store_WP implements WC_Shippin
$zone->save_meta_data(); $zone->save_meta_data();
$this->save_locations( $zone ); $this->save_locations( $zone );
$zone->apply_changes(); $zone->apply_changes();
WC_Cache_Helper::incr_cache_prefix( 'shipping_zones' ); WC_Cache_Helper::invalidate_cache_group( 'shipping_zones' );
WC_Cache_Helper::get_transient_version( 'shipping', true ); WC_Cache_Helper::get_transient_version( 'shipping', true );
} }
@ -60,7 +60,7 @@ class WC_Shipping_Zone_Data_Store extends WC_Data_Store_WP implements WC_Shippin
$zone->save_meta_data(); $zone->save_meta_data();
$this->save_locations( $zone ); $this->save_locations( $zone );
$zone->apply_changes(); $zone->apply_changes();
WC_Cache_Helper::incr_cache_prefix( 'shipping_zones' ); WC_Cache_Helper::invalidate_cache_group( 'shipping_zones' );
WC_Cache_Helper::get_transient_version( 'shipping', true ); WC_Cache_Helper::get_transient_version( 'shipping', true );
} }
@ -132,7 +132,7 @@ class WC_Shipping_Zone_Data_Store extends WC_Data_Store_WP implements WC_Shippin
$zone->set_id( null ); $zone->set_id( null );
WC_Cache_Helper::incr_cache_prefix( 'shipping_zones' ); WC_Cache_Helper::invalidate_cache_group( 'shipping_zones' );
WC_Cache_Helper::get_transient_version( 'shipping', true ); WC_Cache_Helper::get_transient_version( 'shipping', true );
do_action( 'woocommerce_delete_shipping_zone', $zone_id ); do_action( 'woocommerce_delete_shipping_zone', $zone_id );

View File

@ -60,7 +60,7 @@ class WC_Webhook_Data_Store implements WC_Webhook_Data_Store_Interface {
$webhook->apply_changes(); $webhook->apply_changes();
$this->delete_transients( $webhook->get_status( 'edit' ) ); $this->delete_transients( $webhook->get_status( 'edit' ) );
WC_Cache_Helper::incr_cache_prefix( 'webhooks' ); WC_Cache_Helper::invalidate_cache_group( 'webhooks' );
do_action( 'woocommerce_new_webhook', $webhook_id, $webhook ); do_action( 'woocommerce_new_webhook', $webhook_id, $webhook );
} }
@ -157,7 +157,7 @@ class WC_Webhook_Data_Store implements WC_Webhook_Data_Store_Interface {
$this->delete_transients( 'all' ); $this->delete_transients( 'all' );
} }
wp_cache_delete( $webhook->get_id(), 'webhooks' ); wp_cache_delete( $webhook->get_id(), 'webhooks' );
WC_Cache_Helper::incr_cache_prefix( 'webhooks' ); WC_Cache_Helper::invalidate_cache_group( 'webhooks' );
if ( 'active' === $webhook->get_status() && ( $trigger || $webhook->get_pending_delivery() ) ) { if ( 'active' === $webhook->get_status() && ( $trigger || $webhook->get_pending_delivery() ) ) {
$webhook->deliver_ping(); $webhook->deliver_ping();
@ -184,7 +184,7 @@ class WC_Webhook_Data_Store implements WC_Webhook_Data_Store_Interface {
); // WPCS: cache ok, DB call ok. ); // WPCS: cache ok, DB call ok.
$this->delete_transients( 'all' ); $this->delete_transients( 'all' );
WC_Cache_Helper::incr_cache_prefix( 'webhooks' ); WC_Cache_Helper::invalidate_cache_group( 'webhooks' );
do_action( 'woocommerce_webhook_deleted', $webhook->get_id(), $webhook ); do_action( 'woocommerce_webhook_deleted', $webhook->get_id(), $webhook );
} }

View File

@ -2023,7 +2023,7 @@ class WC_API_Products extends WC_API_Resource {
// Clear transients // Clear transients
delete_transient( 'wc_attribute_taxonomies' ); delete_transient( 'wc_attribute_taxonomies' );
WC_Cache_Helper::incr_cache_prefix( 'woocommerce-attributes' ); WC_Cache_Helper::invalidate_cache_group( 'woocommerce-attributes' );
$this->server->send_status( 201 ); $this->server->send_status( 201 );
@ -2109,7 +2109,7 @@ class WC_API_Products extends WC_API_Resource {
// Clear transients // Clear transients
delete_transient( 'wc_attribute_taxonomies' ); delete_transient( 'wc_attribute_taxonomies' );
WC_Cache_Helper::incr_cache_prefix( 'woocommerce-attributes' ); WC_Cache_Helper::invalidate_cache_group( 'woocommerce-attributes' );
return $this->get_product_attribute( $id ); return $this->get_product_attribute( $id );
} catch ( WC_API_Exception $e ) { } catch ( WC_API_Exception $e ) {
@ -2171,7 +2171,7 @@ class WC_API_Products extends WC_API_Resource {
// Clear transients // Clear transients
delete_transient( 'wc_attribute_taxonomies' ); delete_transient( 'wc_attribute_taxonomies' );
WC_Cache_Helper::incr_cache_prefix( 'woocommerce-attributes' ); WC_Cache_Helper::invalidate_cache_group( 'woocommerce-attributes' );
return array( 'message' => sprintf( __( 'Deleted %s', 'woocommerce' ), 'product_attribute' ) ); return array( 'message' => sprintf( __( 'Deleted %s', 'woocommerce' ), 'product_attribute' ) );
} catch ( WC_API_Exception $e ) { } catch ( WC_API_Exception $e ) {

View File

@ -2577,7 +2577,7 @@ class WC_API_Products extends WC_API_Resource {
// Clear transients. // Clear transients.
wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' ); wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' );
delete_transient( 'wc_attribute_taxonomies' ); delete_transient( 'wc_attribute_taxonomies' );
WC_Cache_Helper::incr_cache_prefix( 'woocommerce-attributes' ); WC_Cache_Helper::invalidate_cache_group( 'woocommerce-attributes' );
$this->server->send_status( 201 ); $this->server->send_status( 201 );
@ -2664,7 +2664,7 @@ class WC_API_Products extends WC_API_Resource {
// Clear transients. // Clear transients.
wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' ); wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' );
delete_transient( 'wc_attribute_taxonomies' ); delete_transient( 'wc_attribute_taxonomies' );
WC_Cache_Helper::incr_cache_prefix( 'woocommerce-attributes' ); WC_Cache_Helper::invalidate_cache_group( 'woocommerce-attributes' );
return $this->get_product_attribute( $id ); return $this->get_product_attribute( $id );
} catch ( WC_API_Exception $e ) { } catch ( WC_API_Exception $e ) {
@ -2727,7 +2727,7 @@ class WC_API_Products extends WC_API_Resource {
// Clear transients. // Clear transients.
wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' ); wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' );
delete_transient( 'wc_attribute_taxonomies' ); delete_transient( 'wc_attribute_taxonomies' );
WC_Cache_Helper::incr_cache_prefix( 'woocommerce-attributes' ); WC_Cache_Helper::invalidate_cache_group( 'woocommerce-attributes' );
return array( 'message' => sprintf( __( 'Deleted %s', 'woocommerce' ), 'product_attribute' ) ); return array( 'message' => sprintf( __( 'Deleted %s', 'woocommerce' ), 'product_attribute' ) );
} catch ( WC_API_Exception $e ) { } catch ( WC_API_Exception $e ) {

View File

@ -611,7 +611,7 @@ function wc_create_attribute( $args ) {
// Clear cache and flush rewrite rules. // Clear cache and flush rewrite rules.
wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' ); wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' );
delete_transient( 'wc_attribute_taxonomies' ); delete_transient( 'wc_attribute_taxonomies' );
WC_Cache_Helper::incr_cache_prefix( 'woocommerce-attributes' ); WC_Cache_Helper::invalidate_cache_group( 'woocommerce-attributes' );
return $id; return $id;
} }
@ -701,7 +701,7 @@ function wc_delete_attribute( $id ) {
do_action( 'woocommerce_attribute_deleted', $id, $name, $taxonomy ); do_action( 'woocommerce_attribute_deleted', $id, $name, $taxonomy );
wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' ); wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' );
delete_transient( 'wc_attribute_taxonomies' ); delete_transient( 'wc_attribute_taxonomies' );
WC_Cache_Helper::incr_cache_prefix( 'woocommerce-attributes' ); WC_Cache_Helper::invalidate_cache_group( 'woocommerce-attributes' );
return true; return true;
} }

View File

@ -464,7 +464,7 @@ function wc_delete_shop_order_transients( $order = 0 ) {
WC_Cache_Helper::get_transient_version( 'orders', true ); WC_Cache_Helper::get_transient_version( 'orders', true );
// Do the same for regular cache. // Do the same for regular cache.
WC_Cache_Helper::incr_cache_prefix( 'orders' ); WC_Cache_Helper::invalidate_cache_group( 'orders' );
do_action( 'woocommerce_delete_shop_order_transients', $order_id ); do_action( 'woocommerce_delete_shop_order_transients', $order_id );
} }

View File

@ -104,7 +104,7 @@ function wc_delete_order_item( $item_id ) {
function wc_update_order_item_meta( $item_id, $meta_key, $meta_value, $prev_value = '' ) { function wc_update_order_item_meta( $item_id, $meta_key, $meta_value, $prev_value = '' ) {
$data_store = WC_Data_Store::load( 'order-item' ); $data_store = WC_Data_Store::load( 'order-item' );
if ( $data_store->update_metadata( $item_id, $meta_key, $meta_value, $prev_value ) ) { if ( $data_store->update_metadata( $item_id, $meta_key, $meta_value, $prev_value ) ) {
WC_Cache_Helper::incr_cache_prefix( 'object_' . $item_id ); // Invalidate cache. WC_Cache_Helper::invalidate_cache_group( 'object_' . $item_id ); // Invalidate cache.
return true; return true;
} }
return false; return false;
@ -126,7 +126,7 @@ function wc_add_order_item_meta( $item_id, $meta_key, $meta_value, $unique = fal
$meta_id = $data_store->add_metadata( $item_id, $meta_key, $meta_value, $unique ); $meta_id = $data_store->add_metadata( $item_id, $meta_key, $meta_value, $unique );
if ( $meta_id ) { if ( $meta_id ) {
WC_Cache_Helper::incr_cache_prefix( 'object_' . $item_id ); // Invalidate cache. WC_Cache_Helper::invalidate_cache_group( 'object_' . $item_id ); // Invalidate cache.
return $meta_id; return $meta_id;
} }
return 0; return 0;
@ -146,7 +146,7 @@ function wc_add_order_item_meta( $item_id, $meta_key, $meta_value, $unique = fal
function wc_delete_order_item_meta( $item_id, $meta_key, $meta_value = '', $delete_all = false ) { function wc_delete_order_item_meta( $item_id, $meta_key, $meta_value = '', $delete_all = false ) {
$data_store = WC_Data_Store::load( 'order-item' ); $data_store = WC_Data_Store::load( 'order-item' );
if ( $data_store->delete_metadata( $item_id, $meta_key, $meta_value, $delete_all ) ) { if ( $data_store->delete_metadata( $item_id, $meta_key, $meta_value, $delete_all ) ) {
WC_Cache_Helper::incr_cache_prefix( 'object_' . $item_id ); // Invalidate cache. WC_Cache_Helper::invalidate_cache_group( 'object_' . $item_id ); // Invalidate cache.
return true; return true;
} }
return false; return false;

View File

@ -674,7 +674,7 @@ function wc_update_220_attributes() {
} }
delete_transient( 'wc_attribute_taxonomies' ); delete_transient( 'wc_attribute_taxonomies' );
WC_Cache_Helper::incr_cache_prefix( 'woocommerce-attributes' ); WC_Cache_Helper::invalidate_cache_group( 'woocommerce-attributes' );
} }
/** /**

View File

@ -224,7 +224,7 @@ class WC_Helper_Product {
// Make sure caches are clean. // Make sure caches are clean.
delete_transient( 'wc_attribute_taxonomies' ); delete_transient( 'wc_attribute_taxonomies' );
WC_Cache_Helper::incr_cache_prefix( 'woocommerce-attributes' ); WC_Cache_Helper::invalidate_cache_group( 'woocommerce-attributes' );
// These are exported as labels, so convert the label to a name if possible first. // These are exported as labels, so convert the label to a name if possible first.
$attribute_labels = wp_list_pluck( wc_get_attribute_taxonomies(), 'attribute_label', 'attribute_name' ); $attribute_labels = wp_list_pluck( wc_get_attribute_taxonomies(), 'attribute_label', 'attribute_name' );

View File

@ -51,6 +51,6 @@ class WC_Helper_Shipping_Zones {
$wpdb->query( "TRUNCATE TABLE {$wpdb->prefix}woocommerce_shipping_zone_methods;" ); $wpdb->query( "TRUNCATE TABLE {$wpdb->prefix}woocommerce_shipping_zone_methods;" );
$wpdb->query( "TRUNCATE TABLE {$wpdb->prefix}woocommerce_shipping_zone_locations;" ); $wpdb->query( "TRUNCATE TABLE {$wpdb->prefix}woocommerce_shipping_zone_locations;" );
$wpdb->query( "TRUNCATE TABLE {$wpdb->prefix}woocommerce_shipping_zones;" ); $wpdb->query( "TRUNCATE TABLE {$wpdb->prefix}woocommerce_shipping_zones;" );
WC_Cache_Helper::incr_cache_prefix( 'shipping_zones' ); WC_Cache_Helper::invalidate_cache_group( 'shipping_zones' );
} }
} }