Пример #1
0
<?php

$server = new MemcachedServer();
$server->on(Memcached::ON_CONNECT, function ($remote_ip, $remote_port) {
    echo "Incoming connection from {$remote_ip}:{$remote_port}" . PHP_EOL;
    return Memcached::RESPONSE_SUCCESS;
});
$server->on(Memcached::ON_ADD, function ($client_id, $key, $value, $flags, $expiration, &$cas) {
    echo "client_id=[{$client_id}]: Add key=[{$key}], value=[{$value}], flags=[{$flags}], expiration=[{$expiration}]" . PHP_EOL;
    $cas = 15;
    return Memcached::RESPONSE_SUCCESS;
});
$server->on(Memcached::ON_APPEND, function ($client_id, $key, $value, $cas, &$result_cas) {
    echo "client_id=[{$client_id}]: Append key=[{$key}], value=[{$value}], cas=[{$cas}]" . PHP_EOL;
    return Memcached::RESPONSE_SUCCESS;
});
$server->on(Memcached::ON_PREPEND, function ($client_id, $key, $value, $cas, &$result_cas) {
    echo "client_id=[{$client_id}]: Prepend key=[{$key}], value=[{$value}], cas=[{$cas}]" . PHP_EOL;
    return Memcached::RESPONSE_SUCCESS;
});
$server->on(Memcached::ON_INCREMENT, function ($client_id, $key, $delta, $initial, $expiration, &$result, &$result_cas) {
    echo "client_id=[{$client_id}]: Incrementing key=[{$key}], delta=[{$delta}], initial=[{$initial}], expiration=[{$expiration}]" . PHP_EOL;
    return Memcached::RESPONSE_SUCCESS;
});
$server->on(Memcached::ON_DECREMENT, function ($client_id, $key, $delta, $initial, $expiration, &$result, &$result_cas) {
    echo "client_id=[{$client_id}]: Decrementing key=[{$key}], delta=[{$delta}], initial=[{$initial}], expiration=[{$expiration}]" . PHP_EOL;
    return Memcached::RESPONSE_SUCCESS;
});
$server->on(Memcached::ON_DELETE, function ($client_id, $key, $cas) {
    echo "client_id=[{$client_id}]: Delete key=[{$key}], cas=[{$cas}]" . PHP_EOL;
    return Memcached::RESPONSE_SUCCESS;
            if (!isset($this->cache[$key])) {
                continue;
            }
            $value = $this->cache[$key];
            if ($value->expire < time()) {
                continue;
            }
            $rw->writeLine(sprintf('VALUE %s %d %d', $key, $value->flag, $value->length));
            $rw->writeLine($value->value);
        }
        $rw->writeLine('END');
    }
    protected function set(StreamReadWrite $rw, $key, $flag, $expire, $length)
    {
        $value = new stdClass();
        $value->flag = $flag;
        $value->expire = time() + $expire;
        $value->length = $length;
        $value->value = $rw->readLine();
        $this->cache[$key] = $value;
        $rw->writeLine('STORED');
    }
    protected function delete(StreamReadWrite $rw, $key, $expire = 0)
    {
        if (isset($this->cache[$key])) {
            $this->cache[$key]->expire = $expire;
        }
    }
}
$server = new MemcachedServer(new StorageMemcacheCommand());
$server->start();
Пример #3
0
<?php

$server = new MemcachedServer();
class Storage
{
    private $values = array();
    public function set($key, $value, $expiration)
    {
        $this->values[$key] = array('value' => $value, 'expires' => time() + $expiration);
    }
    public function get($key)
    {
        if (isset($this->values[$key])) {
            if ($this->values[$key]['expires'] < time()) {
                unset($this->values[$key]);
                return null;
            }
            return $this->values[$key]['value'];
        } else {
            return null;
        }
    }
}
$storage = new Storage();
$server->on(Memcached::ON_GET, function ($client_id, $key, &$value, &$flags, &$cas) use($storage) {
    echo "Getting key=[{$key}]" . PHP_EOL;
    if (($value = $storage->get($key)) != null) {
        return Memcached::RESPONSE_SUCCESS;
    }
    return Memcached::RESPONSE_KEY_ENOENT;
});