note 75997 added to ref.memcache
| From: | markfrawley at gmail dot com | Date: | Tue, 26 Jun 2007 08:10:09 +0000 |
| Subject: | note 75997 added to ref.memcache | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-127976@lists.php.net to get a copy of this message | ||
Here is a PHP4 backport of the above MemcacheAggregator class:
<?php
class MemcachedAggregator {
var $connections;
var $_servers;
function MemcachedAggregator($servers) {
$this->_servers = $servers;
// Attempt to establish/retrieve persistent connections to all servers.
// If any of them fail, they just don't get put into our list of active
// connections.
$this->connections = array();
for ($i = 0, $n = count($servers); $i < $n; $i++) {
$server = $servers[$i];
$con = memcache_connect($server['host']);
//memcache_debug(1);
//$memcache = &new Memcache;
//$con = $memcache->connect($server['host']);
if (!($con == false)) {
$this->connections[] = &$con;
}
}
}
function _getConForKey($key) {
$hashCode = 0;
for ($i = 0, $len = strlen($key); $i < $len; $i++) {
$hashCode = (int)(($hashCode*33)+ord($key[$i])) & 0x7fffffff;
}
if (($ns = count($this->connections)) > 0) {
return $this->connections[$hashCode%$ns];
//return $this->connections[0];
}
return false;
}
function debug($on_off) {
$result = false;
for ($i = 0; $i < count($this->connections); $i++) {
if ($this->connections[$i]->debug($on_off)) $result = true;
}
return $result;
}
function flush() {
$result = false;
for ($i = 0; $i < count($this->connections); $i++) {
if ($this->connections[$i]->flush()) $result = true;
}
return $result;
}
/// The following are not implemented:
///getStats()
///getVersion()
function get($key) {
if (is_array($key)) {
$dest = array();
foreach ($key as $subkey) {
$val = get($subkey);
if (!($val === false)) $dest[$subkey] = $val;
}
return $dest;
} else {
$conn = &$this->_getConForKey($key);
return $conn->get($key);
}
}
function set($key, $var, $compress=0, $expire=0) {
$conn = &$this->_getConForKey($key);
return $conn->set($key, $var, $compress, $expire);
}
function add($key, $var, $compress=0, $expire=0) {
$conn = &$this->_getConForKey($key);
return $conn->add($key, $var, $compress, $expire);
}
function replace($key, $var, $compress=0, $expire=0) {
$conn = &$this->_getConForKey($key);
return $conn->replace($key, $var, $compress, $expire);
}
function delete($key, $timeout=0) {
$conn = &$this->_getConForKey($key);
return $conn->delete($key, $timeout);
}
function increment($key, $value=1) {
$conn = &$this->_getConForKey($key);
return $conn->increment($key, $value);
}
function decrement($key, $value=1) {
$conn = &$this->_getConForKey($key);
return $conn->decrement($key, $value);
}
function showStats($server=null) {
$stats_out = '';
if($server == null) {
$i=0;
foreach($this->connections as $conn) {
$server = $this->_servers[$i];
$stats_array = memcache_get_stats($conn);
$stats_out .= "</br><b>Server:
".$server['host'].": </b><br/>";
foreach($stats_array as $key => $val) {
$stats_out .= "$key => $val <br/>";
}
$i++;
}
}
return $stats_out;
}
}
?>
----
Server IP: 193.95.141.37
Probable Submitter: 86.40.183.138
----
Manual Page -- http://www.php.net/manual/en/ref.memcache.php
Edit -- https://master.php.net/note/edit/75997
Del: integrated -- https://master.php.net/note/delete/75997/integrated
Del: useless -- https://master.php.net/note/delete/75997/useless
Del: bad code -- https://master.php.net/note/delete/75997/bad+code
Del: spam -- https://master.php.net/note/delete/75997/spam
Del: non-english -- https://master.php.net/note/delete/75997/non-english
Del: in docs -- https://master.php.net/note/delete/75997/in+docs
Del: other reasons-- https://master.php.net/note/delete/75997
Reject -- https://master.php.net/note/reject/75997
Search -- https://master.php.net/manage/user-notes.php