NOTE: This post explains setting up memcache on Drupal 6. We will very soon follow up for Drupal 7.
Why do I need memcache for my drupal site?
Drupal's default cache mechanism stores a lot of cached content in the database, so every time an http request needs this cached content, they have to make a request to the cache tables of the drupal database. This means the web server has to load your database server into the memory ...NOTE: This post explains setting up memcache on Drupal 6. We will very soon follow up for Drupal 7.
Why do I need memcache for my drupal site?
Drupal's default cache mechanism stores a lot of cached content in the database, so every time an http request needs this cached content, they have to make a request to the cache tables of the drupal database. This means the web server has to load your database server into the memory. So lets say we had to load the entire page (from cache_page) there is no way of skipping calls to the database. Memcache allows you to take memory from parts of your system where you have more than you need and make it accessible to areas where you have less than you need. In our case, memcache stores the cached entries in the system RAM and updates itself whenever the corresponding cache tables are updated. To sum up, you save a lot of computing resources when you start using memcache. And yes, the big guns are using it too :-) Youtube, Facebook, Twitter, Wikipedia, Flickr et al use this service. Read the google's faq to understand how memcache works - http://code.google.com/p/memcached/wiki/FAQ#How_does_memcached_work?
Now that you want to setup memcache on your drupal site, lets jump into the installation. [Note: the below mentioned installation is for ubuntu server and not any other operating system.]
- Install memcached on your server: sudo aptitude install memcached (avoid sudo when already logged in as root)
- Install the php5-dev package if not already done: sudo aptitude install php5-dev (you'll need the dev package to phpize the pecl memcache library)
- Install the PECL memcache library:
- Make sure your php loads the new memcache library: append the following lines in your php.ini (the one that is used by your web server, e.g. if you are using apache, your configuration file is likely to be at /etc/php5/apache2/php.ini)
extension = memcache.so
read more about consistent hashing technique at http://code.google.com/p/memcached/wiki/FAQ#What_is_a_"consistent_hashing"_client?
- Restart your web server: sudo /etc/init.d/apache2 restart
- Okay thats a lot of commands, lets now see if we are moving in the right track. Create a info.php file under your root document and just have the following php code in it Now, call this file from your browser, e.g. [servername]/info.php and if you see something like the following then you are good:
memcache support enabled
Revision $Revision: 310129 $
Else, post your issue as a comment and I'll try to help
- Initiate Memcache instances: What cache tables do you want to use with memcache? You understand that only when you take a look at your database. What cache tables have decent number of entries? Those are the ones you would want to store in your RAM. Lets just assume you want to go for all the cache tables and lets also assume that there are 8 cache tables namely cache, cache_block, cache_content, cache_filter, cache_form, cache_menu, cache_page, cache_views. So here is what you do:
sudo memcached -u www-data -p 11211 -m 2 -d
sudo memcached -u www-data -p 11212 -m 2 -d
sudo memcached -u www-data -p 11213 -m 2 -d
sudo memcached -u www-data -p 11214 -m 2 -d
sudo memcached -u www-data -p 11215 -m 2 -d
sudo memcached -u www-data -p 11216 -m 2 -d
sudo memcached -u www-data -p 11217 -m 2 -d
sudo memcached -u www-data -p 11218 -m 2 -d
Now that would create 8 daemons of memcache instances and you can see the processes with the command ps -A | grep memcached
But thats not it, you need to make sure these instances are running everytime you restart your server. Lets just add the above 8 lines in the init command of memcache located at /etc/init.d/memcached -- add it in the "start" if clause. And now try to restart memcache sudo /etc/init.d/memcached restart and then make sure you test whether the instances are initiated using the same ps command that we tried a short while ago.
- Install memcache module in your drupal code base.
[Advice: Start using drush, it makes life easier, you just need to do a drush dl memcache]
[Note: Do not enable the module yet]
- PUT YOUR SITE TO OFFLINE MODE before continuing else you'll run into the risk of white screen of death
- Modify your settings.php (located in sites/default) so that it knows the relation between the cache tables and the memcache instances. Append the following line in settings.php:
$conf = array( 'cache_inc' => './sites/all/modules/contrib/memcache/memcache.db.inc', 'memcache_servers' => array( 'localhost:11211' => 'default', 'localhost:11212' => 'filter', 'localhost:11213' => 'menu', 'localhost:11214' => 'page', 'localhost:11215' => 'form', 'localhost:11216' => 'content', 'localhost:11217' => 'views', ), 'memcache_bins' => array( 'cache' => 'default', 'cache_filter' => 'filter', 'cache_menu' => 'menu', 'cache_page' => 'page', 'cache_form' => 'form', 'cache_content' => 'content', 'cache_views' => 'views', ), );
- Enable the memcache module
- You can now put your site to ONLINE mode now
- Besides an improved performance, you can also check whether your memcache is responding via the urls admin/settings/memcache and admin/reports/memcache
Do post your comment, even if this post was helpful :-)