From 42208a64eea3ff0c5ae63902e6cb688b074ee95a Mon Sep 17 00:00:00 2001 From: Chad Horohoe Date: Thu, 13 May 2010 17:41:13 +0000 Subject: [PATCH] (bug 22844) Support Micosoft Windows Cache aka WINCACHE --- RELEASE-NOTES | 1 + includes/AutoLoader.php | 1 + includes/BagOStuff.php | 57 ++++++++++++++++++++++++++++++++++++++++ includes/ObjectCache.php | 2 ++ 4 files changed, 61 insertions(+) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index b76c611a29..69c94e6764 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -72,6 +72,7 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN is no title match in search and the user has no rights to create pages. * (bug 23429) Added new hook WatchlistEditorBuildRemoveLine * (bug 18488) Added maintenance script refreshCategoryCounts.php +* (bug 22844) Added support for WinCache object caching === Bug fixes in 1.17 === * (bug 17560) Half-broken deletion moved image files to deletion archive diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index ec64319b4a..03ca5734c8 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -254,6 +254,7 @@ $wgAutoloadLocalClasses = array( 'WikiMap' => 'includes/WikiMap.php', 'WikiReference' => 'includes/WikiMap.php', 'WikiXmlError' => 'includes/WikiError.php', + 'WinCacheBagOStuff' => 'includes/BagOStuff.php', 'XCacheBagOStuff' => 'includes/BagOStuff.php', 'XmlDumpWriter' => 'includes/Export.php', 'Xml' => 'includes/Xml.php', diff --git a/includes/BagOStuff.php b/includes/BagOStuff.php index ac0263d834..8cd5d543ca 100644 --- a/includes/BagOStuff.php +++ b/includes/BagOStuff.php @@ -735,3 +735,60 @@ class DBABagOStuff extends BagOStuff { return $result; } } + +/** + * Wrapper for WinCache object caching functions; identical interface + * to the APC wrapper + * + * @ingroup Cache + */ +class WinCacheBagOStuff extends BagOStuff { + + /** + * Get a value from the WinCache object cache + * + * @param $key String: cache key + * @return mixed + */ + public function get( $key ) { + $val = wincache_ucache_get( $key ); + if ( is_string( $val ) ) + $val = unserialize( $val ); + return $val; + } + + /** + * Store a value in the WinCache object cache + * + * @param $key String: cache key + * @param $value Mixed: object to store + * @param $expire Int: expiration time + * @return bool + */ + public function set( $key, $value, $expire = 0 ) { + wincache_ucache_set( $key, serialize( $value ), $expire ); + return true; + } + + /** + * Remove a value from the WinCache object cache + * + * @param $key String: cache key + * @param $time Int: not used in this implementation + * @return bool + */ + public function delete( $key, $time = 0 ) { + wincache_ucache_delete( $key ); + return true; + } + + public function keys() { + $info = wincache_ucache_info(); + $list = $info['ucache_entries']; + $keys = array(); + foreach ( $list as $entry ) { + $keys[] = $entry['key_name']; + } + return $keys; + } +} diff --git a/includes/ObjectCache.php b/includes/ObjectCache.php index f83e00202a..04c587613b 100644 --- a/includes/ObjectCache.php +++ b/includes/ObjectCache.php @@ -66,6 +66,8 @@ function &wfGetCache( $inputType ) { $wgCaches[CACHE_ACCEL] = new APCBagOStuff; } elseif( function_exists( 'xcache_get' ) ) { $wgCaches[CACHE_ACCEL] = new XCacheBagOStuff(); + } elseif( function_exists( 'wincache_ucache_get' ) ) { + $wgCaches[CACHE_ACCEL] = new WinCacheBagOStuff(); } else { $wgCaches[CACHE_ACCEL] = false; } -- 2.20.1