Memcached is a giant distributed hash table, allowing you to cache data in-memory across multiple machines in your data centre. Commonly, in the web 2.0 world, it's used to store the results of frequently-run queries to avoid hitting the database. This allows the database to scale much further, as it moves much of the load into the fast and almost transparent cache, allowing the database to concentrate on write operations. Many users of memcached report (when implemented correctly) database load dropping by a factor of 10 after implementing query caching in memcached.
Running memcached on WindowsWhy? Linux is normally the OS of choice for running memcached, due to its stability, performance, and low TCO - I'd never recommend to run memcached on Windows in a production environment. However, the memcached network protocol is the same regardless of the client or server OS, meaning that organisations that develop mainly on the Microsoft platform can use a Linux cluster in production, but still conveniently run memcached on the local Windows development server.
Downloading the memcached server and clientMemcached is available from Danga (of LiveJournal fame) here. Memcached server for Windows is available here, and you can grab the latest .NET client from SourceForge here.
First LookUnless you get the source release, the downloaded zip file contains a single file, memcached.exe – no documentation, no release notes. If you run this exe with the “–h” option you get the following list of options.
C:\memcached>memcached.exe -h memcached 1.2.6 -p
TCP port number to listen on (default: 11211) -U UDP port number to listen on (default: 0, off) -s unix socket path to listen on (disables network support) -a access mask for unix socket, in octal (default 0700) -l interface to listen on, default is INDRR_ANY -d start tell memcached to start -d restart tell running memcached to do a graceful restart -d stop|shutdown tell running memcached to shutdown -d install install memcached service -d uninstall uninstall memcached service -r maximize core file limit -u assume identity of (only when run as root) -m max memory to use for items in megabytes, default is 64 MB -M return error on memory exhausted (rather than removing items) -c max simultaneous connections, default is 1024 -k lock down all paged memory. Note that there is a limit on how much memory you may lock. Trying to allocate more than that would fail, so be sure you set the limit correctly for the user you started the daemon with (not for -u user; under sh this is done with 'ulimit -S -l NUM_KB'). -v verbose (print errors/warnings while in event loop) -vv very verbose (also print client commands/reponses) -h print this help and exit -i print memcached and libevent license -b run a managed instanced (mnemonic: buckets) -P save PID in , only used with -d option -f chunk size growth factor, default 1.25 -n minimum space allocated for key+value+flags, default 48
Running the serverMemcached has no configuration file – it's controlled purely by the command line parameters above. To run the server with default settings – 64Mb cache memory, and listening on port 11211.
If you use the “-vv” flag, you get a much more verbose output with details of client connections: Your memcached server is now running.
Running memcached as a Windows ServiceThe Win32 port also allows you to install and run memcached as a service, using the “-d” (daemonizer) switch with its various options. To install it, run the command:
memcached.exe –d install
This will install the server as a service available in the control panel. To start it, either run the command:
memcached.exe –d start
… or start it from your Services manager:
ConfigurationThe two main settings that may require configuration are the cache size, and port.
The default cache size is 64mb, which for any web 2.0 application is a pretty paltry cache. You can change the cache size (in megabytes) using the "-m" switch:
memcached.exe –m 1024
The above will configure memcached to use a gigabyte of memory.