<?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;
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; }); $server->on(Memcached::ON_SET, function ($client_id, $key, $value, $flags, $expiration, $cas, &$result_cas) use($storage) { echo "Setting key=[{$key}] value=[{$value}]" . PHP_EOL; $storage->set($key, $value, $expiration); return Memcached::RESPONSE_SUCCESS; }); $server->run("127.0.0.1:3434");