(bug 22844) Support Micosoft Windows Cache aka WINCACHE
authorChad Horohoe <demon@users.mediawiki.org>
Thu, 13 May 2010 17:41:13 +0000 (17:41 +0000)
committerChad Horohoe <demon@users.mediawiki.org>
Thu, 13 May 2010 17:41:13 +0000 (17:41 +0000)
RELEASE-NOTES
includes/AutoLoader.php
includes/BagOStuff.php
includes/ObjectCache.php

index b76c611..69c94e6 100644 (file)
@@ -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
index ec64319..03ca573 100644 (file)
@@ -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',
index ac0263d..8cd5d54 100644 (file)
@@ -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;
+       }
+}
index f83e002..04c5876 100644 (file)
@@ -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;
                        }