Move the namespace algorithm functions to dedicated CacheNameSpaceTrait.

We intend to use the same namespacing algorithm for HPOS orders cache like we have been using before for posts. Moving this structure to a common trait allow us to use the same logic for both posts and HPOS.
This commit is contained in:
Vedanshu Jain 2023-01-24 14:47:05 +05:30
parent 248e8ffa81
commit 7aabda47a1
4 changed files with 70 additions and 41 deletions

View File

@ -5,12 +5,15 @@
* @package WooCommerce\Classes
*/
use Automattic\WooCommerce\Caching\CacheNameSpaceTrait;
defined( 'ABSPATH' ) || exit;
/**
* WC_Cache_Helper.
*/
class WC_Cache_Helper {
use CacheNameSpaceTrait;
/**
* Transients to delete on shutdown.
@ -42,7 +45,7 @@ class WC_Cache_Helper {
*/
public static function additional_nocache_headers( $headers ) {
global $wp_query;
$agent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
$set_cache = false;
@ -114,44 +117,6 @@ class WC_Cache_Helper {
}
}
/**
* Get prefix for use with wp_cache_set. Allows all cache in a group to be invalidated at once.
*
* @param string $group Group of cache to get.
* @return string
*/
public static function get_cache_prefix( $group ) {
// Get cache key - uses cache key wc_orders_cache_prefix to invalidate when needed.
$prefix = wp_cache_get( 'wc_' . $group . '_cache_prefix', $group );
if ( false === $prefix ) {
$prefix = microtime();
wp_cache_set( 'wc_' . $group . '_cache_prefix', $prefix, $group );
}
return 'wc_cache_' . $prefix . '_';
}
/**
* Increment group cache prefix (invalidates cache).
*
* @param string $group Group of cache to clear.
*/
public static function incr_cache_prefix( $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 );
}
/**
* Get a hash of the customer location.
*

View File

@ -13,8 +13,6 @@ use Automattic\WooCommerce\Utilities\OrderUtil;
defined( 'ABSPATH' ) || exit;
use Automattic\WooCommerce\Utilities\OrderUtil;
/**
* Order factory class
*/

View File

@ -0,0 +1,66 @@
<?php
namespace Automattic\WooCommerce\Caching;
/**
* Implements namespacing algorithm to simulate grouping and namespacing for wp_cache, memcache and other caching engines that don't support grouping natively.
*
* See the algorithm details here: https://github.com/memcached/memcached/wiki/ProgrammingTricks#namespacing.
*
* To use the namespacing algorithm in the CacheEngine class:
* 1. Use a group string to identify all objects of a type.
* 2. Before setting cache, prefix the cache key by using the `get_cache_prefix`.
* 3. Use `invalidate_cache_group` function to invalidate all caches in entire group at once.
*/
trait CacheNameSpaceTrait {
/**
* Get prefix for use with wp_cache_set. Allows all cache in a group to be invalidated at once.
*
* @param string $group Group of cache to get.
* @return string Prefix.
*/
public static function get_cache_prefix( $group ) {
// Get cache key - uses cache key wc_orders_cache_prefix to invalidate when needed.
$prefix = wp_cache_get( 'wc_' . $group . '_cache_prefix', $group );
if ( false === $prefix ) {
$prefix = microtime();
wp_cache_set( 'wc_' . $group . '_cache_prefix', $prefix, $group );
}
return 'wc_cache_' . $prefix . '_';
}
/**
* Increment group cache prefix (invalidates cache).
*
* @param string $group Group of cache to clear.
*/
public static function incr_cache_prefix( $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 );
}
/**
* Helper method to get prefixed key.
*
* @param string $key Key to prefix.
* @param string $group Group of cache to get.
*
* @return string Prefixed key.
*/
public static function get_prefixed_key( $key, $group ) {
return self::get_cache_prefix( $group ) . $key;
}
}