diff options
Diffstat (limited to 'includes/objectcache/MemcachedPhpBagOStuff.php')
-rw-r--r-- | includes/objectcache/MemcachedPhpBagOStuff.php | 139 |
1 files changed, 32 insertions, 107 deletions
diff --git a/includes/objectcache/MemcachedPhpBagOStuff.php b/includes/objectcache/MemcachedPhpBagOStuff.php index 14016683..a46dc716 100644 --- a/includes/objectcache/MemcachedPhpBagOStuff.php +++ b/includes/objectcache/MemcachedPhpBagOStuff.php @@ -1,14 +1,32 @@ <?php +/** + * Object caching using memcached. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + * @ingroup Cache + */ /** * A wrapper class for the pure-PHP memcached client, exposing a BagOStuff interface. + * + * @ingroup Cache */ -class MemcachedPhpBagOStuff extends BagOStuff { - - /** - * @var MemCachedClientforWiki - */ - protected $client; +class MemcachedPhpBagOStuff extends MemcachedBagOStuff { /** * Constructor. @@ -24,24 +42,7 @@ class MemcachedPhpBagOStuff extends BagOStuff { * @param $params array */ function __construct( $params ) { - if ( !isset( $params['servers'] ) ) { - $params['servers'] = $GLOBALS['wgMemCachedServers']; - } - if ( !isset( $params['debug'] ) ) { - $params['debug'] = $GLOBALS['wgMemCachedDebug']; - } - if ( !isset( $params['persistent'] ) ) { - $params['persistent'] = $GLOBALS['wgMemCachedPersistent']; - } - if ( !isset( $params['compress_threshold'] ) ) { - $params['compress_threshold'] = 1500; - } - if ( !isset( $params['timeout'] ) ) { - $params['timeout'] = $GLOBALS['wgMemCachedTimeout']; - } - if ( !isset( $params['connect_timeout'] ) ) { - $params['connect_timeout'] = 0.1; - } + $params = $this->applyDefaultParams( $params ); $this->client = new MemCachedClientforWiki( $params ); $this->client->set_servers( $params['servers'] ); @@ -56,36 +57,18 @@ class MemcachedPhpBagOStuff extends BagOStuff { } /** - * @param $key string - * @return Mixed - */ - public function get( $key ) { - return $this->client->get( $this->encodeKey( $key ) ); - } - - /** - * @param $key string - * @param $value - * @param $exptime int - * @return bool + * @param $keys Array + * @return Array */ - public function set( $key, $value, $exptime = 0 ) { - return $this->client->set( $this->encodeKey( $key ), $value, $exptime ); - } - - /** - * @param $key string - * @param $time int - * @return bool - */ - public function delete( $key, $time = 0 ) { - return $this->client->delete( $this->encodeKey( $key ), $time ); + public function getMulti( array $keys ) { + $callback = array( $this, 'encodeKey' ); + return $this->client->get_multi( array_map( $callback, $keys ) ); } /** * @param $key * @param $timeout int - * @return + * @return bool */ public function lock( $key, $timeout = 0 ) { return $this->client->lock( $this->encodeKey( $key ), $timeout ); @@ -98,26 +81,7 @@ class MemcachedPhpBagOStuff extends BagOStuff { public function unlock( $key ) { return $this->client->unlock( $this->encodeKey( $key ) ); } - - /** - * @param $key string - * @param $value int - * @return Mixed - */ - public function add( $key, $value, $exptime = 0 ) { - return $this->client->add( $this->encodeKey( $key ), $value, $exptime ); - } - - /** - * @param $key string - * @param $value int - * @param $exptime - * @return Mixed - */ - public function replace( $key, $value, $exptime = 0 ) { - return $this->client->replace( $this->encodeKey( $key ), $value, $exptime ); - } - + /** * @param $key string * @param $value int @@ -135,44 +99,5 @@ class MemcachedPhpBagOStuff extends BagOStuff { public function decr( $key, $value = 1 ) { return $this->client->decr( $this->encodeKey( $key ), $value ); } - - /** - * Get the underlying client object. This is provided for debugging - * purposes. - * - * @return MemCachedClientforWiki - */ - public function getClient() { - return $this->client; - } - - /** - * Encode a key for use on the wire inside the memcached protocol. - * - * We encode spaces and line breaks to avoid protocol errors. We encode - * the other control characters for compatibility with libmemcached - * verify_key. We leave other punctuation alone, to maximise backwards - * compatibility. - */ - public function encodeKey( $key ) { - return preg_replace_callback( '/[\x00-\x20\x25\x7f]+/', - array( $this, 'encodeKeyCallback' ), $key ); - } - - protected function encodeKeyCallback( $m ) { - return rawurlencode( $m[0] ); - } - - /** - * Decode a key encoded with encodeKey(). This is provided as a convenience - * function for debugging. - * - * @param $key string - * - * @return string - */ - public function decodeKey( $key ) { - return urldecode( $key ); - } } |