mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-08-11 20:30:23 +00:00
Preload commonly loaded site options when running multisite without a persistent cache. Introduce wp_cache_reset() and call it instead of wp_cache_init() when re-initing after the blog ID chanages to avoid throwing out the entire cache. Pass cached site options through the site option filter when fetching.
git-svn-id: https://develop.svn.wordpress.org/trunk@13066 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
+61
-10
@@ -149,8 +149,9 @@ function wp_cache_set($key, $data, $flag = '', $expire = 0) {
|
||||
* @param string|array $groups A group or an array of groups to add
|
||||
*/
|
||||
function wp_cache_add_global_groups( $groups ) {
|
||||
// Default cache doesn't persist so nothing to do here.
|
||||
return;
|
||||
global $wp_object_cache;
|
||||
|
||||
return $wp_object_cache->add_global_groups($groups);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -165,6 +166,20 @@ function wp_cache_add_non_persistent_groups( $groups ) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset internal cache keys and structures. If the cache backend uses global blog or site IDs as part of its cache keys,
|
||||
* this function instructs the backend to reset those keys and perform any cleanup since blog or site IDs have changed since cache init.
|
||||
*
|
||||
* @since 2.6.0
|
||||
*
|
||||
* @param string|array $groups A group or an array of groups to add
|
||||
*/
|
||||
function wp_cache_reset() {
|
||||
global $wp_object_cache;
|
||||
|
||||
return $wp_object_cache->reset();
|
||||
}
|
||||
|
||||
/**
|
||||
* WordPress Object Cache
|
||||
*
|
||||
@@ -219,6 +234,15 @@ class WP_Object_Cache {
|
||||
*/
|
||||
var $cache_misses = 0;
|
||||
|
||||
/**
|
||||
* List of global groups
|
||||
*
|
||||
* @var array
|
||||
* @access protected
|
||||
* @since 3.0.0
|
||||
*/
|
||||
var $global_groups = array();
|
||||
|
||||
/**
|
||||
* Adds data to the cache if it doesn't already exist.
|
||||
*
|
||||
@@ -234,8 +258,8 @@ class WP_Object_Cache {
|
||||
* @param int $expire When to expire the cache contents
|
||||
* @return bool False if cache ID and group already exists, true on success
|
||||
*/
|
||||
function add($id, $data, $group = 'default', $expire = '') {
|
||||
if (empty ($group))
|
||||
function add( $id, $data, $group = 'default', $expire = '' ) {
|
||||
if ( empty ($group) )
|
||||
$group = 'default';
|
||||
|
||||
if (false !== $this->get($id, $group))
|
||||
@@ -244,6 +268,20 @@ class WP_Object_Cache {
|
||||
return $this->set($id, $data, $group, $expire);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the list of global groups.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param array $groups List of groups that are global.
|
||||
*/
|
||||
function add_global_groups( $groups ) {
|
||||
$groups = (array) $groups;
|
||||
|
||||
$this->global_groups = array_merge($this->global_groups, $groups);
|
||||
$this->global_groups = array_unique($this->global_groups);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the contents of the cache ID in the group
|
||||
*
|
||||
@@ -308,10 +346,10 @@ class WP_Object_Cache {
|
||||
* contents on success
|
||||
*/
|
||||
function get($id, $group = 'default') {
|
||||
if (empty ($group))
|
||||
if ( empty ($group) )
|
||||
$group = 'default';
|
||||
|
||||
if (isset ($this->cache[$group][$id])) {
|
||||
if ( isset ($this->cache[$group][$id]) ) {
|
||||
$this->cache_hits += 1;
|
||||
if ( is_object($this->cache[$group][$id]) )
|
||||
return wp_clone($this->cache[$group][$id]);
|
||||
@@ -343,12 +381,25 @@ class WP_Object_Cache {
|
||||
if (empty ($group))
|
||||
$group = 'default';
|
||||
|
||||
if (false === $this->get($id, $group))
|
||||
if ( false === $this->get($id, $group) )
|
||||
return false;
|
||||
|
||||
return $this->set($id, $data, $group, $expire);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset keys
|
||||
*
|
||||
* @since 3.0.0
|
||||
*/
|
||||
function reset() {
|
||||
// Clear out non-global caches since the blog ID has changed.
|
||||
foreach ( array_keys($this->cache) as $group ) {
|
||||
if ( !in_array($group, $this->global_groups) )
|
||||
unset($this->cache[$group]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the data contents into the cache
|
||||
*
|
||||
@@ -370,10 +421,10 @@ class WP_Object_Cache {
|
||||
* @return bool Always returns true
|
||||
*/
|
||||
function set($id, $data, $group = 'default', $expire = '') {
|
||||
if (empty ($group))
|
||||
if ( empty ($group) )
|
||||
$group = 'default';
|
||||
|
||||
if (NULL === $data)
|
||||
if ( NULL === $data )
|
||||
$data = '';
|
||||
|
||||
if ( is_object($data) )
|
||||
@@ -381,7 +432,7 @@ class WP_Object_Cache {
|
||||
|
||||
$this->cache[$group][$id] = $data;
|
||||
|
||||
if(isset($this->non_existent_objects[$group][$id]))
|
||||
if ( isset($this->non_existent_objects[$group][$id]) )
|
||||
unset ($this->non_existent_objects[$group][$id]);
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user