public $compressThreshold = 20480;
public $compressMinSaving = 0.2;
+ public $persistent = null;
+
+ public $defaultExpiry = 86400; // 24h
+
/**
* Initialize the plugin
*
function onInitializePlugin()
{
+ if (is_null($this->persistent)) {
+ $this->persistent = (php_sapi_name() == 'cli') ? false : true;
+ }
$this->_ensureConn();
return true;
}
function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
{
$this->_ensureConn();
+ if ($expiry === null) {
+ $expiry = $this->defaultExpiry;
+ }
$success = $this->_conn->set($key, $value, $flag, $expiry);
Event::handle('EndCacheSet', array($key, $value, $flag,
$expiry));
return false;
}
+ function onStartCacheReconnect(&$success)
+ {
+ if (empty($this->_conn)) {
+ // nothing to do
+ return true;
+ }
+ if ($this->persistent) {
+ common_log(LOG_ERR, "Cannot close persistent memcached connection");
+ $success = false;
+ } else {
+ common_log(LOG_INFO, "Closing memcached connection");
+ $success = $this->_conn->close();
+ $this->_conn = null;
+ }
+ return false;
+ }
+
/**
* Ensure that a connection exists
*
$this->_conn = new Memcache();
if (is_array($this->servers)) {
- foreach ($this->servers as $server) {
- list($host, $port) = explode(';', $server);
- if (empty($port)) {
- $port = 11211;
- }
-
- $this->_conn->addServer($host, $port);
- }
+ $servers = $this->servers;
} else {
- $this->_conn->addServer($this->servers);
- list($host, $port) = explode(';', $this->servers);
- if (empty($port)) {
+ $servers = array($this->servers);
+ }
+ foreach ($servers as $server) {
+ if (strpos($server, ';') !== false) {
+ list($host, $port) = explode(';', $server);
+ } else {
+ $host = $server;
$port = 11211;
}
- $this->_conn->addServer($host, $port);
+
+ $this->_conn->addServer($host, $port, $this->persistent);
}
// Compress items stored in the cache if they're over threshold in size
$this->compressMinSaving);
}
}
+
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'Memcache',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Evan Prodromou, Craig Andrews',
+ 'homepage' => 'http://status.net/wiki/Plugin:Memcache',
+ 'rawdescription' =>
+ _m('Use <a href="http://memcached.org/">Memcached</a> to cache query results.'));
+ return true;
+ }
}