ADOdb

Database Abstraction Layer for PHP

User Tools

Site Tools


v5:userguide:memcached

Memcached Setup

Description

This section describes connecting to an already configured Memcache server. 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

$db = NewADOConnection($driver='mysqli');
 
/*
 * Enable memcache
 */
$db->memCache = true;
 
/*
 * Add one or more servers, for use in distributed systems
 */
$db->memCacheHost = array('192.168.0.78', '192.168.0.79', '192.168.0.80');
 
/*
 * Optionally add the server port if it differs from the default
 */
$db->memCachePort = 11211;
 
/*
 * Use 'true' to store the item compressed (uses zlib)
 * Note; Compression is only supported using the memcache library. This
 *       parameter will be ignored when using the memcached library
 */
$db->memCacheCompress = false;
 
/*
 * We connect to the database, not the memcache server
 */
$db->Connect('localhost','mysql-user','mysql-password','employees');
 
/*
 * look for a cached query with a life of 2400 seconds
 */
$sql = 'SELECT code,description FROM xref_table';
$db->cacheExecute(2400,$sql);

Adding Weighted Server Groups

From ADOdb version 5.22, the memcached library supports the use of Weighted server groups, in which a specific server can be forced to return a result a specific percentage of the time. If the feature is used, the total weighting of the server group must equal 100$. To achieve this the configuration of the servers must be defined in a different way to the default. Each host is defined as an array:

array(
 'host'=> The host name,
 'port'=> The port, defaults to 11211,
 'weight'=> A percentage, up to 100,
);

The host arrays are then combined together. In this example 86.91 serves 70% of requests and 86.92 serves 30%

$hosts = array(
    array('host'=>'192.168.86.91','port'=>'11211','weight'=>70)
    array('host'=>'192.168.86.92','port'=>'11211','weight'=>30)
    );
 
$db = NewADOConnection($driver='mysqli');
 
/*
 * Enable memcache
 */
$db->memCache = true;
 
/*
 * Add the weighted servers in $memCacheHosts. All other parameters are ignored.
 */
$db->memCacheHost = $hosts
 

Adding options to the memcached server

From ADOdb version 5.22, server options can be set on the Memcached connection by use of the memCacheOptions array

$hosts = array(
    array('host'=>'192.168.86.91','port'=>'11211','weight'=>70)
    array('host'=>'192.168.86.92','port'=>'11211','weight'=>30)
    );
 
$db = NewADOConnection($driver='mysqli');
 
/*
 * Enable memcache
 */
$db->memCache = true;
 
/*
 * Add the weighted servers in $memCacheHosts
 */
$db->memCacheHost = $hosts;
 
/*
* Set some options
*/
$db->memCacheOptions = array(Memcached::OPT_HASH=>Memcached::HASH_MURMUR);

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.

3849805e4e026b9e7c485999a24a95c6 cache failure: Item with such key doesn't exists on the memcached server.
(this is a notice and not an error)
-----<hr>

(mysqli): SELECT * FROM employees

------<hr>

Notice: MemcachePool::set(): Server 192.168.0.78 (tcp 11211, udp 0) failed with:
SERVER_ERROR object too large for cache
(3) in C:\dev\github\mssqlnative-fixes\adodb-memcache.lib.inc.php on line 94
Failed to save data at the memcached server!

Cache write error

PHP Notice:  MemcachePool::set(): Server 192.168.0.78 (tcp 11211, udp 0) failed with:
SERVER_ERROR object too large for cache (3)
in C:\dev\github\mssqlnative-fixes\adodb-memcache.lib.inc.php on line 94

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

v5/userguide/memcached.txt · Last modified: 2021/01/25 03:49 by mnewnham