00001 <?php
00002
00003
00004 if (!defined('ADODB_DIR')) die();
00005
00006 global $ADODB_INCLUDED_MEMCACHE;
00007 $ADODB_INCLUDED_MEMCACHE = 1;
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 function &getmemcache($key,&$err, $timeout=0, $host, $port)
00022 {
00023 $false = false;
00024 $err = false;
00025
00026 if (!function_exists('memcache_pconnect')) {
00027 $err = 'Memcache module PECL extension not found!';
00028 return $false;
00029 }
00030
00031 $memcache = new Memcache;
00032 if (!@$memcache->pconnect($host, $port)) {
00033 $err = 'Can\'t connect to memcache server on: '.$host.':'.$port;
00034 return $false;
00035 }
00036
00037 $rs = $memcache->get($key);
00038 if (!$rs) {
00039 $err = 'Item with such key doesn\'t exists on the memcached server.';
00040 return $false;
00041 }
00042
00043 $tdiff = intval($rs->timeCreated+$timeout - time());
00044 if ($tdiff <= 2) {
00045 switch($tdiff) {
00046 case 2:
00047 if ((rand() & 15) == 0) {
00048 $err = "Timeout 2";
00049 return $false;
00050 }
00051 break;
00052 case 1:
00053 if ((rand() & 3) == 0) {
00054 $err = "Timeout 1";
00055 return $false;
00056 }
00057 break;
00058 default:
00059 $err = "Timeout 0";
00060 return $false;
00061 }
00062 }
00063 return $rs;
00064 }
00065
00066 function putmemcache($key, $rs, $host, $port, $compress, $debug=false)
00067 {
00068 $false = false;
00069 $true = true;
00070
00071 if (!function_exists('memcache_pconnect')) {
00072 if ($debug) ADOConnection::outp(" Memcache module PECL extension not found!<br>\n");
00073 return $false;
00074 }
00075
00076 $memcache = new Memcache;
00077 if (!@$memcache->pconnect($host, $port)) {
00078 if ($debug) ADOConnection::outp(" Can't connect to memcache server on: $host:$port<br>\n");
00079 return $false;
00080 }
00081
00082 $rs->timeCreated = time();
00083 if (!$memcache->set($key, $rs, $compress, 0)) {
00084 if ($debug) ADOConnection::outp(" Failed to save data at the memcached server!<br>\n");
00085 return $false;
00086 }
00087 return $true;
00088 }
00089
00090 function flushmemcache($key=false, $host, $port, $debug=false)
00091 {
00092 if (!function_exists('memcache_pconnect')) {
00093 if ($debug) ADOConnection::outp(" Memcache module PECL extension not found!<br>\n");
00094 return;
00095 }
00096
00097 $memcache = new Memcache;
00098 if (!@$memcache->pconnect($host, $port)) {
00099 if ($debug) ADOConnection::outp(" Can't connect to memcache server on: $host:$port<br>\n");
00100 return;
00101 }
00102
00103 if ($key) {
00104 if (!$memcache->delete($key)) {
00105 if ($debug) ADOConnection::outp("CacheFlush: $key entery doesn't exist on memcached server!<br>\n");
00106 } else {
00107 if ($debug) ADOConnection::outp("CacheFlush: $key entery flushed from memcached server!<br>\n");
00108 }
00109 } else {
00110 if (!$memcache->flush()) {
00111 if ($debug) ADOConnection::outp("CacheFlush: Failure flushing all enteries from memcached server!<br>\n");
00112 } else {
00113 if ($debug) ADOConnection::outp("CacheFlush: All enteries flushed from memcached server!<br>\n");
00114 }
00115 }
00116 return;
00117 }
00118 ?>