X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2Flibs%2Fobjectcache%2FMemcachedPhpBagOStuff.php;h=ea73cbaee79183ce840216fc4f09c65442f1bb59;hb=c069752a95cda40e65dc7420ca7f65230bf591ef;hp=3ff390b8132127835a82c1b8940f6082e3db5b9f;hpb=1abed55d47e661b5d9f4c1e894bf0cb5ac00fa5e;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/libs/objectcache/MemcachedPhpBagOStuff.php b/includes/libs/objectcache/MemcachedPhpBagOStuff.php index 3ff390b813..ea73cbaee7 100644 --- a/includes/libs/objectcache/MemcachedPhpBagOStuff.php +++ b/includes/libs/objectcache/MemcachedPhpBagOStuff.php @@ -27,6 +27,9 @@ * @ingroup Cache */ class MemcachedPhpBagOStuff extends MemcachedBagOStuff { + /** @var MemcachedClient */ + protected $client; + /** * Available parameters are: * - servers: The list of IP:port combinations holding the memcached servers. @@ -51,23 +54,73 @@ class MemcachedPhpBagOStuff extends MemcachedBagOStuff { $this->client->set_debug( $debug ); } - public function getMulti( array $keys, $flags = 0 ) { - foreach ( $keys as $key ) { - $this->validateKeyEncoding( $key ); - } + protected function doGet( $key, $flags = 0, &$casToken = null ) { + $casToken = null; - return $this->client->get_multi( $keys ); + return $this->client->get( $this->validateKeyEncoding( $key ), $casToken ); + } + + protected function doSet( $key, $value, $exptime = 0, $flags = 0 ) { + return $this->client->set( + $this->validateKeyEncoding( $key ), + $value, + $this->fixExpiry( $exptime ) + ); + } + + protected function doDelete( $key, $flags = 0 ) { + return $this->client->delete( $this->validateKeyEncoding( $key ) ); + } + + public function add( $key, $value, $exptime = 0, $flags = 0 ) { + return $this->client->add( + $this->validateKeyEncoding( $key ), + $value, + $this->fixExpiry( $exptime ) + ); + } + + protected function cas( $casToken, $key, $value, $exptime = 0, $flags = 0 ) { + return $this->client->cas( + $casToken, + $this->validateKeyEncoding( $key ), + $value, + $this->fixExpiry( $exptime ) + ); } public function incr( $key, $value = 1 ) { - $this->validateKeyEncoding( $key ); + $n = $this->client->incr( $this->validateKeyEncoding( $key ), $value ); - return $this->client->incr( $key, $value ) ?? false; + return ( $n !== false && $n !== null ) ? $n : false; } public function decr( $key, $value = 1 ) { - $this->validateKeyEncoding( $key ); + $n = $this->client->decr( $this->validateKeyEncoding( $key ), $value ); + + return ( $n !== false && $n !== null ) ? $n : false; + } + + public function changeTTL( $key, $exptime = 0, $flags = 0 ) { + return $this->client->touch( + $this->validateKeyEncoding( $key ), + $this->fixExpiry( $exptime ) + ); + } + + public function doGetMulti( array $keys, $flags = 0 ) { + foreach ( $keys as $key ) { + $this->validateKeyEncoding( $key ); + } + + return $this->client->get_multi( $keys ); + } + + protected function serialize( $value ) { + return is_int( $value ) ? $value : $this->client->serialize( $value ); + } - return $this->client->decr( $key, $value ) ?? false; + protected function unserialize( $value ) { + return $this->isInteger( $value ) ? (int)$value : $this->client->unserialize( $value ); } }