ADOdb

Database Abstraction Layer for PHP

User Tools

Site Tools


v6:userguide:memcached

Memcached Setup

Description

This section describes connecting to an already configured Memcache server with either the The Memcached Caching Plugin or The Memcache Caching Plugin connection plugins. Information about installation and configuration of Memcached servers can be found here.

The Memcache Library

There are 2 distinct PEAR modules for connecting to a Memcached server: the Memcache library and the Memcached library.

  • Windows support is only available for the Memcache library.
  • Memcache should be used in PHP 5.x environments on UNIX platforms.
  • Memcached should be used in PHP 7.x environments on UNIX platforms.
  • If both libraries are available, Memcache will be used.

Why can't I use the memcached library under Windows?

The memcached library is much more heavily featured, more modern and better maintained. The problem with it is not a problem with ADOdb, nor a problem with PHP. The PHP module is dependent on the 3rd party library libmemcache, which has no Windows support. Any Windows DLLs you might find floating around the web will always be built on the memcache library.

Usage

/*
* Example for logging
*/
$debugStreamHandler    = new StreamHandler('/logs/debug.log', Logger::DEBUG);
$criticalStreamHandler = new StreamHandler('/logs/critical.log', Logger::CRITICAL);
 
$streamHandlers = array(
    Logger::DEBUG=>$debugStreamHandler,
    Logger::CRITICAL=>$criticalStreamHandler);
 
 
$dbParameters = array(
  'host'=>'192.168.86.85',
  'user'=>'adodb',
  'password'=>'adodb',
  'database'=>'employees');
 
 
/*
 * Enable memcache
 */
 
$memcacheClass = new \ADOdb\cache\plugins\memcached\ADOCachingDefinitions;
 
 
$memcacheClass->memCacheControllers = array(
    array('host'=>'192.168.86.91','port'=>'11211','weight'=>70),
    array('host'=>'192.168.86.92','port'=>'11211','weight'=>30));
 
$memcacheClass->memCacheOptions = array(
    Memcached::OPT_HASH=>Memcached::HASH_MURMUR
    );
 
 
$acd = new ADOdb\ADOConnectionDefinitions(
    $streamHandlers,
    null,
    $memcacheClass);
 
$acd->driver = 'mysqli';
$acd->dbParameters = $dbParameters;
 
 
$obj = new ADOdb\connector($acd);
 
$db = $obj->connect();
 
 
/*
 * look for a cached query with a life of 2400 seconds, in the mygroup group
 */
$options = array('cache'=>array(
       'cachesecs'=>2400,
       'serverkey'=>'mygroup');
 
$sql = 'SELECT code,description FROM xref_table';
$db->execute($sql,null,$options);

Using Debug Mode

The size of query results that can be cached by the memcached server is limited by server configuration. The default is quite small. If the query is too large, and debugging is enabled, then an error is displayed.

ADOdb.DEBUG: MEMCACHED: Loaded the MemCached Libary [] []
ADOdb.DEBUG: MEMCACHED: Successfully set memcache option 2 to 8 [] []
ADOdb.DEBUG: MEMCACHED: 71a071eb865c1bafbcc49e274a7ac6b6 cache failure: Timeout 1 (this is a notice and not an error [] []
ADOdb.DEBUG: MEMCACHED: Successfully wrote query contents on key 71a071eb865c1bafbcc49e274a7ac6b6 to memcache server [] []
ADOdb.DEBUG: MEMCACHED: Item with key 71a071eb865c1bafbcc49e274a7ac6b6 retrieved from the memcache server. [using server key server-test] [] []

ADOdb currently has no mechanism for splitting large queries into smaller chunks.

v6/userguide/memcached.txt · Last modified: by 127.0.0.1