Skip to content
README.txt 7.91 KiB
Newer Older
Robert Douglass's avatar
Robert Douglass committed
// $Id$

## REQUIREMENTS ##

- PHP 5.1 or greater
- Availability of a memcached daemon: http://memcached.org/
- One of the two PECL memcache packages:
  - http://pecl.php.net/package/memcache
  - http://pecl.php.net/package/memcached (recommended

Robert Douglass's avatar
Robert Douglass committed
## INSTALLATION ##
These are the broad steps you need to take in order to use this software. Order
is important.

1. Install the memcached binaries on your server. See 

http://www.lullabot.com/articles/how_install_memcache_debian_etch

2. Install the PECL memcache extension for PHP. This must be version 2.2.1 or 
   higher or you will experience errors.
3. Put your site into offline mode.
4. Download and install the memcache module.
5. If you have previously been running the memcache module, run update.php.
6. Start at least one instance of memcached on your server.
7. Edit settings.php to configure the servers, clusters and bins that memcache
8. Edit settings.php to include cache.inc, memcache.inc.  For example:
     include_once('./includes/cache.inc');
     include_once('./sites/all/modules/memcache/memcache.inc');
9. Edit settings.php to make memcache the default caching class:
     $conf['cache_default_class'] = 'MemCacheDrupal';
9. Bring your site back online.

For instructions on 1 and 2 above, please see the INSTALLATION.txt file that
comes with the memcache module download.

At this time, only memcache.inc is available in Drupal 7.  The memcache.inc.db
file has not yet been ported.

http://www.lullabot.com/files/memcache-inc.png

In Drupal 7+, you no longer should set cache_inc in settings.php.  Instead, you
will have to manually include 'cache.inc' and 'memcache.inc', then update $conf
to tell Drupal to default to memcache for caching:

  // the path to the core cache file
  include_once('./includes/cache.inc');
  // the path to the memcache cache file
  include_once('./sites/all/modules/memcache/memcache.inc');
  // make MemCacheDrupal the default cache class
  $conf['cache_default_class'] = 'MemCacheDrupal';
Robert Douglass's avatar
Robert Douglass committed
## SERVERS ##
If you want the simple version, you can start one default memcache instance on
your web server like this: memcached -m 24 -p 11211 -d
If that is enough to meet your needs, there is no more configuration needed. If
you want to utilize this module's sophisticated clustering feature and spread
your cache over several machines, or if your cache is found on a machine other
than your web server, read on.

lyricnz's avatar
lyricnz committed
The available memcached servers are specified in $conf in settings.php. If
you do not specify any servers, memcache.inc assumes that you have a
memcached instance running on localhost:11211. If this is true, and it is
the only memcached instance you wish to use, no further configuration is
required.
lyricnz's avatar
lyricnz committed
If you have more than one memcached instance running, you need to add two
arrays to $conf; memcache_servers and memcache_bins. The arrays follow this
pattern:
'memcache_servers' => array(
  host1:port => cluster, 
  host2:port => cluster, 
  hostN:port => cluster
)
Robert Douglass's avatar
Robert Douglass committed

'memcache_bins' => array(bin1 => cluster, bin2 => cluster, binN => cluster)

The bin/cluster/server model can be described as follows:

- Servers are memcached instances identified by host:port.
lyricnz's avatar
lyricnz committed

- Bins are groups of data that get cached together and map 1:1 to the $table
  param in cache_set(). Examples from Drupal core are cache_filter,
lyricnz's avatar
lyricnz committed
  cache_menu. The default is 'cache'.

- Clusters are groups of servers that act as a memory pool.
lyricnz's avatar
lyricnz committed

Robert Douglass's avatar
Robert Douglass committed
- many bins can be assigned to a cluster.
lyricnz's avatar
lyricnz committed

Robert Douglass's avatar
Robert Douglass committed
- The default cluster is 'default'.

Here is a simple setup that has two memcached instances, both running on
localhost. The 11212 instance belongs to the 'pages' cluster and the table
cache_page is mapped to the 'pages' cluster. Thus everything that gets cached,
with the exception of the page cache (cache_page), will be put into 'default',
or the 11211 instance. The page cache will be in 11212.

$conf = array(
  ...
Steve Rude's avatar
Steve Rude committed
  // Important to define a default cluster in both the servers
  // and in the bins. This links them together.
  'memcache_servers' => array('localhost:11211' => 'default',
                              'localhost:11212' => 'pages'),
Steve Rude's avatar
Steve Rude committed
  'memcache_bins' => array('cache' => 'default',
                           'cache_page' => 'pages'),
lyricnz's avatar
lyricnz committed
Here is an example configuration that has two clusters, 'default' and
'cluster2'. Five memcached instances are divided up between the two
clusters. 'cache_filter' and 'cache_menu' bins goe to 'cluster2'. All other
bins go to 'default'.
include_once('./includes/cache.inc');
include_once('./sites/all/modules/memcache/memcache.inc');
Robert Douglass's avatar
Robert Douglass committed
$conf = array(
  'cache_default_class' = 'MemCacheDrupal',
Robert Douglass's avatar
Robert Douglass committed
  'memcache_servers' => array('localhost:11211' => 'default',
                              'localhost:11212' => 'default',
                              '123.45.67.890:11211' => 'default',
                              '123.45.67.891:11211' => 'cluster2',
Robert Douglass's avatar
Robert Douglass committed
                              '123.45.67.892:11211' => 'cluster2'),

Robert Douglass's avatar
Robert Douglass committed
  'memcache_bins' => array('cache' => 'default',
                           'cache_filter' => 'cluster2',
lyricnz's avatar
lyricnz committed
                           'cache_menu' => 'cluster2'),
Robert Douglass's avatar
Robert Douglass committed
);
## PREFIXING ##
Steve Rude's avatar
Steve Rude committed

If you want to have multiple Drupal installations share memcached instances,
you need to include a unique prefix for each Drupal installation in the $conf
array of settings.php:
Steve Rude's avatar
Steve Rude committed

$conf = array(
  ...
  'memcache_key_prefix' => 'something_unique',
);
Here is a sample config that uses memcache for sessions. Note you MUST have
a session and a users server set up for memcached sessions to work.
NOTE: Session.inc is not yet ported to Drupal 7.
include_once('./includes/cache.inc');
include_once('./sites/all/modules/memcache/memcache.inc');
$conf = array(
  'cache_default_class' = 'MemCacheDrupal',
  'session_inc' => './sites/all/modules/memcache/memcache-session.inc',
  'memcache_servers' => array(
    'localhost:11211' => 'default',
    'localhost:11212' => 'filter',
    'localhost:11213' => 'menu',
    'localhost:11214' => 'page',
    'localhost:11215' => 'session',
    'localhost:11216' => 'users',
  ),
  'memcache_bins' => array(
    'cache' => 'default',
    'cache_filter' => 'filter',
    'cache_menu' => 'menu',
    'cache_page' => 'page',
    'session' => 'session',
    'users' => 'users',
  ),
);
Steve Rude's avatar
Steve Rude committed
PROBLEM:
Error:
Failed to set key: Failed to set key: cache_page-......

SOLUTION:
Upgrade your PECL library to PECL package (2.2.1) (or higher).

WARNING: 
Zlib compression at the php.ini level and Memcache conflict. 
See http://drupal.org/node/273824

Robert Douglass's avatar
Robert Douglass committed
## MEMCACHE ADMIN ##
A module offering a UI for memcache is included. It provides stats, a
lyricnz's avatar
lyricnz committed
way to clear the cache, and an interface to organize servers/bins/clusters.


## Memcached PECL Extension Support

We also now support the Memcached PECL extension. If you install this extension,
it will be used by default. This new extension backends to libmemcached and 
allows you to use some of the newer advanced features in memcached 1.4. 

NOTE: It is important to realize that the memcache php.ini options do not impact
the memcached extension, this new extension doesn't read in options that way.
Instead, it takes options directly from Drupal. Because of this, you must
configure memcached in settings.php. Please look here for possible options:

http://us2.php.net/manual/en/memcached.constants.php

An example configuration block is below, this block also illustrates our
default options. These will be set unless overridden in settings.php.
  Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT,
);

These are as follows:

 * Turn off compression, as this takes more CPU cycles than its worth for most
   users
 * Turn on consistent distribution, which allows you to add/remove servers
   easily

If you are using memcached 1.4 or above, you should enable the binary protocol,
which is more advanced and faster, by adding the following to settings.php:

$conf['memcache_options'] = array(
  Memcached::OPT_BINARY_PROTOCOL => TRUE,
);