====== Memcached Setup ======
===== Description =====
This section describes connecting to an already configured Memcache server. Information about installation and configuration of Memcached servers can be found [[https://memcached.org/|here]].
===== The Memcache Library =====
There are 2 distinct PEAR modules for connecting to a [[wp>Memcached]] server: the [[https://pecl.php.net/package/memcache|Memcache]] library and the [[https://pecl.php.net/package/memcached|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)
*/
$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, [[https://www.php.net/manual/en/memcached.setoption.php|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 [[v5:userguide:debug|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)
-----
(mysqli): SELECT * FROM employees
------
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.
{{tag>[memcached cache]}}