Usage: Memcached $ cachenewCache_MemCache (); $ cache-addServer (www1); $ cache-addServer (www2, 201711,20); expires, andgetsdoubletheweight $ cache-addS Memcache
Usage:
Memcached
$ Cache = new Cache_MemCache (); $ Cache-> addServer ('www1 '); $ Cache-> addServer ('www2 ', expires 11,20); // this server has double the memory, and gets double the weight $ Cache-> addServer ('www3', 11211 );
// Store some data in the cache for 10 minutes $ Cache-> store ('My _ key', 'foobar', 600 );
// Get it out of the cache again Echo ($ cache-> fetch ('My _ key ')); |
File Cache
$ Cache = new Cache_File ();
$ Key = 'getusers: selectall ';
// Check if the data is not in the cache already If (! $ Data = $ cache-> fetch ($ key )){ // Assuming there is a database connection $ Result = mysql_query ("SELECT * FROM users "); $ Data = array ();
// Fetching all the data and putting it in an array While ($ row = mysql_fetch_assoc ($ result) {$ data [] = $ row ;}
// Storing the data in the cache for 10 minutes $ Cache-> store ($ key, $ data, 600 ); } |
Class_cache3.php
Abstract class Cache_Abstract { Abstract function fetch ($ key ); Abstract function store ($ key, $ data, $ ttl ); Abstract function delete ($ key ); }
Class Cache_APC extends Cache_Abstract {
Function fetch ($ key ){ Return apc_fetch ($ key ); }
Function store ($ key, $ data, $ ttl ){ Return apc_store ($ key, $ data, $ ttl ); }
Function delete ($ key ){ Return apc_delete ($ key ); }
}
Class Cache_MemCache extends Cache_Abstract { Public $ connection;
Function _ construct (){ $ This-> connection = new MemCache; }
Function store ($ key, $ data, $ ttl ){ Return $ this-> connection-> set ($ key, $ data, 0, $ ttl ); }
Function fetch ($ key ){ Return $ this-> connection-> get ($ key ); }
Function delete ($ key ){ Return $ this-> connection-> delete ($ key ); }
Function addServer ($ host, $ port = 11211, $ weight = 10 ){ $ This-> connection-> addServer ($ host, $ port, true, $ weight ); }
}
Class Cache_File extends Cache_Abstract {
Function store ($ key, $ data, $ ttl ){ $ H = fopen ($ this-> getFileName ($ key), 'A + '); If (! $ H) Throw new Exception ('could not write to cache '); Flock ($ h, LOCK_EX ); Fseek ($ h, 0 ); Ftruncate ($ h, 0 ); $ Data = serialize (array (time () + $ ttl, $ data )); If (fwrite ($ h, $ data) === false ){ Throw new Exception ('could not write to cache '); } Fclose ($ h ); }
Function fetch ($ key ){ $ Filename = $ this-> getFileName ($ key ); If (! File_exists ($ filename )) Return false; $ H = fopen ($ filename, 'r '); If (! $ H) Return false; Flock ($ h, LOCK_SH ); $ Data = file_get_contents ($ filename ); Fclose ($ h ); $ Data = @ unserialize ($ data ); If (! $ Data ){ Unlink ($ filename ); Return false; } If (time ()> $ data [0]) { Unlink ($ filename ); Return false; } Return $ data [1]; }
Function delete ($ key ){ $ Filename = $ this-> getFileName ($ key ); If (file_exists ($ filename )){ Return unlink ($ filename ); } Else { Return false; } }
Private function getFileName ($ key ){ Return '/tmp/s_cache'. md5 ($ key ); }
} ?> |