This post explains how to improve performance of WordPress on Windows by using the WinCache Extension 1.1 – Beta for PHP. You probably already know that just by enabling the WinCache extension and without any code changes it is possible to get a significant increase in WordPress performance – this is described in details in PHP on Windows: The WinCache 1.0 Benchmark. But this can be taken even further by using the user cache API’s available in WinCache 1.1 release.
To configure WordPress to use WinCache user cache API’s copy the following code and put it in the file named object-cache.php located at the /wp-content/ directory of your WordPress site. Note that this code was copied from here and the only change was to replace all the APC cache function with corresponding WinCache functions.
<?php
/*
Name: WinCache Cache
Description: WinCache backend for the WP Object Cache.
Version: 0.1
URI: http://ruslany.net/
Author: Ruslan Yakushev
Install this file to wp-content/object-cache.php
Big thanks to Mark Jaquith (http://markjaquith.wordpress.com/)
whose apc-object-cache.php was used as a basis for this code.
*/
// gracefully revert to default cache if WinCache is not installed
if ( !extension_loaded('wincache') ||
!function_exists('wincache_ucache_get') ||
strcmp(ini_get('wincache.ucenabled'), "1") ) {
include_once(ABSPATH . WPINC . '/cache.php');
} else {
function wp_cache_add($key, $data, $flag = '', $expire = 0) {
global $wp_object_cache;
return $wp_object_cache->add($key, $data, $flag, $expire);
}
function wp_cache_close() {
return true;
}
function wp_cache_delete($id, $flag = '') {
global $wp_object_cache;
return $wp_object_cache->delete($id, $flag);
}
function wp_cache_flush() {
global $wp_object_cache;
return $wp_object_cache->flush();
}
function wp_cache_get($id, $flag = '') {
global $wp_object_cache;
return $wp_object_cache->get($id, $flag);
}
function wp_cache_init() {
global $wp_object_cache;
$wp_object_cache = new WP_Object_Cache();
}
function wp_cache_replace($key, $data, $flag = '', $expire = 0) {
global $wp_object_cache;
return $wp_object_cache->replace($key, $data, $flag, $expire);
}
function wp_cache_set($key, $data, $flag = '', $expire = 0) {
global $wp_object_cache;
return $wp_object_cache->set($key, $data, $flag, $expire);
}
class WP_Object_Cache {
var $global_groups = array ('users', 'userlogins', 'usermeta');
var $cache = array ();
function add($id, $data, $group = 'default', $expire = 0) {
return $this->set($id, $data, $group, $expire);
}
function delete($id, $group = 'default') {
$key = $this->key($id, $group);
$result = wincache_ucache_delete($key);
if ( false !== $result )
unset($this->cache[$key]);
return $result;
}
function flush() {
wincache_ucache_clear();
return true;
}
function get($id, $group = 'default') {
$key = $this->key($id, $group);
if ( isset($this->cache[$key]) )
$value = $this->cache[$key];
else
$value = wincache_ucache_get($key);
/* echo "Cache key: $key<br/>";
echo 'Cache value:<br/>';
var_dump($value);
echo '<br/>'; */
if ( NULL === $value )
$value = false;
$this->cache[$key] = $value;
return $value;
}
function key($key, $group) {
global $blog_id;
if ( empty($group) )
$group = 'default';
if (false !== array_search($group, $this->global_groups))
$prefix = '';
else
$prefix = $blog_id . ':';
return md5(ABSPATH . "$prefix$group:$key");
}
function replace($id, $data, $group = 'default', $expire = 0) {
return $this->set($id, $data, $group, $expire);
}
function set($id, $data, $group = 'default', $expire = 0) {
$key = $this->key($id, $group);
$result = wincache_ucache_set($key, $data, $expire);
if ( false !== $result )
$this->cache[$key] = $data;
return $result;
}
function stats() {
$wincache_info = wincache_ucache_info();
echo "<p>\n";
echo "<strong>Cache Hits:</strong> {$wincache_info['total_hit_count']}<br/>\n";
echo "<strong>Cache Misses:</strong> {$wincache_info['total_miss_count']}<br/>\n";
echo "</p>\n";
if ( ! empty($this->cache) ) {
echo "<pre>\n";
print_r($this->cache);
echo "</pre>\n";
}
}
function WP_Object_Cache() {
// Nothing here
}
}
}
?>
You can also download the code by using the link below:
Object Cache for Wordpress
Make sure that the code is saved in a file called object-cache.php inside of the /wp-content/ directory.
That should be all you need to do. To verify that the WordPress is actually using the object cache use the WinCache Statistics Script and check the “User and Session Cache” page:

Read the complete post here