Wednesday, April 14, 2010

11:19 PM

Installing memcache on Windows XP / Vista is kind of like voodoo for those of us who are not disciplined with compiling code from source. I initially attempted to install memcache a few months ago after reading a few articles about how much performance it can pump into your web application. 

The problem is that memcache was written with Linux in mind, not windows. So you can’t download any installers or exe files from memcache’s site for windows … which leaves people like me, who use WAMP stacks to develop applications, out in the cold.
So after a few hours of Googling I found a cocktail of methods and files to get memcache to work for win32.
A few things about memcache:
Memcache is a daemon, meaning it runs as a separate service on your machine. Just like MySQL runs as a separate service. In fact, to use memcache in PHP you have to connect to it, just like MySQL.

Think of memcache as the $_SESSION variable for PHP, but instead of it working on a per-user basis, it runs over the entire application — like MySQL. In fact, you can use memcache as you session handler for PHP.

This is how I got memcache to work on my windows machine:
  1. Download memcache from code.jellycan.com/memcached/ [grab the 'win32 binary' version]
  2. Install memcache as a service:
    • Unzip and copy the binaries to your desired directory (eg. c:\memcached) [you should see one file, memcached.exe] – thanks to Stephen for the heads up on the new version
    • If you’re running Vista, right click on memcached.exe and click Properties. Click the Compatibility tab. Near the bottom you’ll see Privilege Level, check “Run this program as an administrator”.
    • Install the service using the command:c:\memcached\memcached.exe -d install from the command line
    • Start the server from the Microsoft Management Console or by running one of the following commands:c:\memcached\memcached.exe -d start, or net start "memcached Server"

Now that you have memcache installed, you’ll have to tie it in with PHP in order to use it.
  1. Check your php extensions directory [should be something like:C:\php\ext] for php_memcache.dll
    If you don’t have any luck finding it, try looking at one of these sites:
    downloads.php.net/pierre/ [thanks to Henrik Gemal]
  2. Now find your php.ini file [default location for XP Pro isC:\WINDOWS\php.ini] and add this line to the extensions list:
    extension=php_memcache.dll
  3. Restart apache
  4. Run this code to test the installation: [found onwww.php.net/memcache]
    <?php
    $memcache = new Memcache;
    $memcache->connect("localhost",11211); # You might need to set "localhost" to "127.0.0.1"
    echo "Server's version: " . $memcache->getVersion() . "<br />\n";
    $tmp_object = new stdClass;
    $tmp_object->str_attr = "test";
    $tmp_object->int_attr = 123;
    $memcache->set("key",$tmp_object,false,10);
    echo "Store data in the cache (data will expire in 10 seconds)<br />\n";
    echo "Data from the cache:<br />\n";
    var_dump($memcache->get("key"));
    ?>
If you see anything but errors, you are now using memcache!
EDIT
Memcached, by default, loads with 64mb of memory for it’s use which is low for most applications. To change this to something else, navigate toHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server in your registry, find the ImagePath entry and change it to look something like this:
“C:\memcached\memcached.exe” -d runservice -m 512
Now when you start the service via net start “memcached Server”, it will run with 512mb of memory at it’s disposal.

0 comments: