After upgrading the CSFBL forums to vBulletin 4.0, I noticed that performance was slightly worse than in the previous version. A little searching revealed that vBulletin supports memcached (an in-memory distributed caching system). Since I’ve got RAM to spare, I figured this is worth a shot.
Unfortunately, getting memcached running on the server (Windows Server 2008 R2 64-bit) took a few tricks, and getting memached running through IIS/PHP was another. To help other people through the same process (and to remind myself in the future), I’ll share the installation and configuration steps that worked for me below.
Downloading and configuring memcached
The official distributions of memcached are written for Linux systems, so the first task is finding Windows binaries. The memcached project site, fortunately, has links to Windows binaries, which are hosted by NorthScale. Both 32-bit and 64-bit versions are available.
(Note that NorthScale also offers their own free distribution of memcached, but I was unable to get this to run on my system.)
Versions of memcached prior to 1.4.5 supported a command-line option that would register memcached as a Windows service (as in
memcached -d install), but this option was removed in version 1.4.5. The simple alternative is to schedule memcached.exe to run using the Task Scheduler service (Windows 2008/Vista/7).
You can create a task to run memcached on system startup using the following command line:
schtasks /create /sc onstart /tn memcached /tr "'c:\dev\utils\memcached-amd64\memcached.exe' -m 128"
-m 128 argument; this tells memcached to use up to 128MB of RAM. There are other command line arguments available; most useful aside from
-l (to specify what IP addresses to bind to) and
-vv (to add verbose logging to the console, useful for testing).
Integrating memcached with PHP
In order for PHP to use memcached, you must download the PHP memcached library and add it as an extension to PHP.
PHP extensions can be downloaded from http://downloads.php.net/pierre. Many different extensions are in here; the one I used was php_memcache-5.2-nts-Win32-vc6-x86-20090408.zip. This extension matches two key requirements:
- PHP version 5.2 (the version installed using the Web Platform Installer)
- A non-thread-safe version of the extension (the version of PHP installed is not thread safe, which provides performance improvements using FastCGI)
Getting the right version of the extension is important; download the thread-safe version, or the PHP 5.3 version, and it simply won’t work.
Once downloaded, take the
php_memcache.dll and put it in the
ext folder in your PHP directory (for me,
c:\Program Files (x86)\PHP\ext). Then, open the
php.ini file (in your PHP directory) and add the following line to the end:
Restart IIS (from the command line, type
iisreset), and if you did everything right, memcached should now be available to PHP. If you want to check, you can create a phpinfo page; if php_memcache is listed in the output, the extension is registered correctly.
To find out more about PHP, memcached, and Windows, check out the following links.
- NorthScale Memcached – a free, commercial memcached distribution that I couldn’t get to work in my environment
- Installing memcache on Windows for PHP – a blog post explaining something similar to what I just did
- memcached from Jellycan Code – an alternate memcached build for Windows that runs as a service
- Installing memcached on Windows – instructions for installing the Jellycan Code version of memcached