Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion core/Cache/CachePeer.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ abstract public function delete($key)

abstract public function isAlive()

Memcached <- CachePeer:
SocketMemcached <- CachePeer:

public function __construct(
$host = Memcached::DEFAULT_PORT,
Expand Down
171 changes: 171 additions & 0 deletions core/Cache/PeclMemcache.class.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
<?php
/***************************************************************************
* Copyright (C) 2006-2008 by Konstantin V. Arkhipov *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation; either version 3 of the *
* License, or (at your option) any later version. *
* *
***************************************************************************/

/**
* Connector for PECL's Memcache extension by Antony Dovgal.
*
* @see http://tony2001.phpclub.net/
* @see http://pecl.php.net/package/memcache
*
* @ingroup Cache
**/
class PeclMemcache extends CachePeer
{
const DEFAULT_PORT = 11211;
const DEFAULT_HOST = '127.0.0.1';

private $instance = null;

/**
* @return PeclMemcache
**/
public static function create(
$host = self::DEFAULT_HOST,
$port = self::DEFAULT_PORT
)
{
return new self($host, $port);
}

public function __construct(
$host = self::DEFAULT_HOST,
$port = self::DEFAULT_PORT
)
{
$this->instance = new Memcache();

try {
try {
$this->instance->pconnect($host, $port);
} catch (BaseException $e) {
$this->instance->connect($host, $port);
}

$this->alive = true;
} catch (BaseException $e) {
// bad luck.
}
}

public function __destruct()
{
if ($this->alive) {
try {
$this->instance->close();
} catch (BaseException $e) {
// shhhh.
}
}
}

/**
* @return PeclMemcached
**/
public function clean()
{
try {
$this->instance->flush();
} catch (BaseException $e) {
$this->alive = false;
}

return parent::clean();
}

public function increment($key, $value)
{
try {
return $this->instance->increment($key, $value);
} catch (BaseException $e) {
return null;
}
}

public function decrement($key, $value)
{
try {
return $this->instance->decrement($key, $value);
} catch (BaseException $e) {
return null;
}
}

public function getList($indexes)
{
return
($return = $this->get($indexes))
? $return
: array();
}

public function get($index)
{
try {
return $this->instance->get($index);
} catch (BaseException $e) {
if(strpos($e->getMessage(), 'Invalid key') !== false)
return null;

$this->alive = false;

return null;
}

Assert::isUnreachable();
}

public function delete($index)
{
try {
// second parameter required, wrt new memcached protocol:
// delete key 0 (see process_delete_command in the memcached.c)
// Warning: it is workaround!
return $this->instance->delete($index, 0);
} catch (BaseException $e) {
return $this->alive = false;
}

Assert::isUnreachable();
}

public function append($key, $data)
{
try {
return $this->instance->append($key, $data);
} catch (BaseException $e) {
return $this->alive = false;
}

Assert::isUnreachable();
}

protected function store(
$action, $key, $value, $expires = Cache::EXPIRES_MEDIUM
)
{
try {
return
$this->instance->$action(
$key,
$value,
$this->compress
? MEMCACHE_COMPRESSED
: false,
$expires
);
} catch (BaseException $e) {
return $this->alive = false;
}

Assert::isUnreachable();
}
}
?>
12 changes: 6 additions & 6 deletions core/Cache/PeclMemcached.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,18 @@ class PeclMemcached extends CachePeer
* @return PeclMemcached
**/
public static function create(
$host = Memcached::DEFAULT_HOST,
$port = Memcached::DEFAULT_PORT,
$connectTimeout = PeclMemcached::DEFAULT_TIMEOUT
$host = self::DEFAULT_HOST,
$port = self::DEFAULT_PORT,
$connectTimeout = self::DEFAULT_TIMEOUT
)
{
return new self($host, $port, $connectTimeout);
}

public function __construct(
$host = Memcached::DEFAULT_HOST,
$port = Memcached::DEFAULT_PORT,
$connectTimeout = PeclMemcached::DEFAULT_TIMEOUT
$host = self::DEFAULT_HOST,
$port = self::DEFAULT_PORT,
$connectTimeout = self::DEFAULT_TIMEOUT
)
{
$this->host = $host;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
*
* @ingroup Cache
**/
class Memcached extends CachePeer
class SocketMemcached extends CachePeer
{
const DEFAULT_PORT = 11211;
const DEFAULT_HOST = '127.0.0.1';
Expand All @@ -29,24 +29,24 @@ class Memcached extends CachePeer

private $timeout = null;

private $buffer = Memcached::DEFAULT_BUFFER;
private $buffer = self::DEFAULT_BUFFER;

/**
* @return Memcached
* @return SocketMemcached
**/
public static function create(
$host = Memcached::DEFAULT_HOST,
$port = Memcached::DEFAULT_PORT,
$buffer = Memcached::DEFAULT_BUFFER
$host = self::DEFAULT_HOST,
$port = self::DEFAULT_PORT,
$buffer = self::DEFAULT_BUFFER
)
{
return new Memcached($host, $port, $buffer);
return new self($host, $port, $buffer);
}

public function __construct(
$host = Memcached::DEFAULT_HOST,
$port = Memcached::DEFAULT_PORT,
$buffer = Memcached::DEFAULT_BUFFER
$host = self::DEFAULT_HOST,
$port = self::DEFAULT_PORT,
$buffer = self::DEFAULT_BUFFER
)
{
$errno = $errstr = null;
Expand All @@ -70,7 +70,7 @@ public function __destruct()
}

/**
* @return Memcached
* @return SocketMemcached
*/
public function setTimeout($microseconds)
{
Expand All @@ -90,7 +90,7 @@ public function setTimeout($microseconds)


/**
* @return Memcached
* @return SocketMemcached
**/
public function clean()
{
Expand Down
8 changes: 8 additions & 0 deletions doc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
2012-05-28 Georgiy T. Kutsurua

* core/Cache/PeclMemcache.class.php
core/Cache/PeclMemcached.class.php
core/Cache/{Memcached.class.php → SocketMemcached.class.php}

Code clean & add SocketMemcached instead of Memcached

2012-05-23 Georgiy T. Kutsurua

* main/Base/LightMetaProperty.class.php: fix after Enum update
Expand Down
4 changes: 2 additions & 2 deletions doc/examples/cacheSettings.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
// set up default cache peer

Cache::setPeer(
Memcached::create()
SocketMemcached::create()
);

// or even several aggregated peers
Expand All @@ -15,7 +15,7 @@
AggregateCache::create()->
addPeer(
'memcached daemon at localhost',
Memcached::create()
SocketMemcached::create()
)->
addPeer(
'local low-priority file system',
Expand Down
22 changes: 11 additions & 11 deletions test/core/AggregateCacheTest.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ public function testAggregateCache()
{
return $this->doTestMemcached(
AggregateCache::create()->
addPeer('low', Memcached::create(), AggregateCache::LEVEL_LOW)->
addPeer('normal1', Memcached::create())->
addPeer('normal2', Memcached::create())->
addPeer('normal3', Memcached::create())->
addPeer('high', Memcached::create(), AggregateCache::LEVEL_HIGH)->
addPeer('low', SocketMemcached::create(), AggregateCache::LEVEL_LOW)->
addPeer('normal1', SocketMemcached::create())->
addPeer('normal2', SocketMemcached::create())->
addPeer('normal3', SocketMemcached::create())->
addPeer('high', SocketMemcached::create(), AggregateCache::LEVEL_HIGH)->
setClassLevel('one', 0xb000)
);
}
Expand All @@ -33,11 +33,11 @@ public function testSimpleAggregateCache()
{
return $this->doTestMemcached(
SimpleAggregateCache::create()->
addPeer('low', Memcached::create(), AggregateCache::LEVEL_LOW)->
addPeer('normal1', Memcached::create())->
addPeer('normal2', Memcached::create())->
addPeer('normal3', Memcached::create())->
addPeer('high', Memcached::create(), AggregateCache::LEVEL_HIGH)->
addPeer('low', SocketMemcached::create(), AggregateCache::LEVEL_LOW)->
addPeer('normal1', SocketMemcached::create())->
addPeer('normal2', SocketMemcached::create())->
addPeer('normal3', SocketMemcached::create())->
addPeer('high', SocketMemcached::create(), AggregateCache::LEVEL_HIGH)->
setClassLevel('one', 0xb000)
);
}
Expand All @@ -47,7 +47,7 @@ public function testCyclicAggregateCache()
$this->doTestMemcached(
CyclicAggregateCache::create()->
setSummaryWeight(42)->
addPeer('first', Memcached::create(), 25)->
addPeer('first', SocketMemcached::create(), 25)->
addPeer('second', PeclMemcached::create(), 1)->
addPeer('third', PeclMemcached::create(), 13)
);
Expand Down
4 changes: 2 additions & 2 deletions test/core/BaseCachesTest.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ final class BaseCachesTest extends TestCase
public static function cacheProvider()
{
return array(
// array(Memcached::create()),
// array(SocketMemcached::create()),
// array(SharedMemory::create()),
// array(PeclMemcached::create()),
array(RuntimeMemory::create()),
Expand Down Expand Up @@ -61,7 +61,7 @@ public function testWrongKeys(CachePeer $cache)
public function testWithTimeout()
{
$cache =
Memcached::create('localhost')->
SocketMemcached::create('localhost')->
setTimeout(200);

$cache->add('a', 'b');
Expand Down
8 changes: 4 additions & 4 deletions test/core/SequentialCacheTest.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public function testMultiCacheAliveLast()
$alifePeer = new PeclMemcached("127.0.0.1", "11211"); //some existing memcached
$alifePeer->set('some_key', 'some_value');

$deadPeer = new Memcached("165.42.42.42", "11211"); //some not existing memcache
$deadPeer = new SocketMemcached("165.42.42.42", "11211"); //some not existing memcache

$slave1 = new PeclMemcached("35.143.65.241", "11211"); //some not existing memcache

Expand All @@ -34,7 +34,7 @@ public function testMultiCacheAliveLast()

public function testMultiCacheAliveFirst()
{
$alifePeer = new Memcached("127.0.0.1", "11211"); //some existing memcached
$alifePeer = new SocketMemcached("127.0.0.1", "11211"); //some existing memcached
$alifePeer->set('some_key', 'some_value');

$slave1 = new PeclMemcached("35.143.65.241", "11211"); //some not existing memcache
Expand All @@ -54,7 +54,7 @@ public function testMultiCacheAliveOnly()
CyclicAggregateCache::create()-> //some existing memcached
setSummaryWeight(42)->
addPeer('first', new PeclMemcached("127.0.0.1", "11211"), 0)->
addPeer('second', new Memcached("127.0.0.1", "11211"), 21);
addPeer('second', new SocketMemcached("127.0.0.1", "11211"), 21);

$alifePeer->set('some_key', 'some_value');

Expand All @@ -77,4 +77,4 @@ public function testMultiCacheNoAlive()

$result = $cache->get("some_key"); //will throw RuntimeException
}
}
}