Service Memcached pour Windows x64

J’ai mis un temps certain à trouver une version de Memcached compilée pour Windows 64 bits. Une fois trouvée, il fallait en faire un service entièrement paramétrable. Voici donc un service wrapper pour Memcached dans une version certes un peu ancienne (1.4.5), mais parfaitement fonctionnelle.

Téléchargement

Code source sur GitHub: http://github.com/eric-b/MemcachedService64.

Le programme embarque l’exécutable de memcached 1.4.5 compilé pour Windows 64 bits par NorthScale (trouvé via le blog de Cyrille Mahieux). Testé sous Windows 7 64 bits et Windows Server 2008 64 bits.

Points notables

Installation / désinstallation du service

L’installation et la désinstallation du service est géré par le programme console avec la commande suivante:


MemcachedService64.exe --install
MemcachedService64.exe --uninstall

Il est possible également de démarrer le programme en mode console:


MemcachedService64.exe

Les options de ligne de commande sont transmises à memcached, cela facilite le diagnostic avec les options de verbosité:


MemcachedService64.exe -vv

À noter cependant: les options de la ligne de commande ne sont pas fusionnées avec celles du fichier de configuration (ligne de commande prioritaire).

Configuration

La sortie est gérée grâce à NLog (sortie console et journaux). La configuration est dans le fichier NLog.config.

Le paramétrage de memcached est dans le fichier de configuration du programme. Le fichier de configuration par défaut est le suivant:


<configuration>
  <system.diagnostics>
    <assert assertuienabled="false" />
  </system.diagnostics>
  <appSettings>
    <add key="-p TCP Port" value="11211" />
    <add key="-m max memory (MB)" value="64" />
    <add key="-c max connections" value="1024" />
    <add key="-t threads" value="4" />
    <add key="custom options" value="-l 127.0.0.1" />
  </appSettings>
</configuration>

assertuienabled=false empêche l’ouverture d’une boîte de dialogue en cas d’assertion. C’est particulièrement important avec NLog dont certains modules (Trace par exemple) génèrent une assertion en cas d’erreur.

Les autres paramètres sont passés à Memcached (ce qui suit le premier espace dans le nom du paramètre est ignoré). Le paramètre custom options est particulier en ce sens qu’il est ajouté en l’état en fin de ligne de commande.

Test de bon fonctionnement

Exécuter le programme en mode console ou service et ouvrir une session telnet:


telnet 127.0.0.1 11211
stats

Memcached devrait retourner ses statistiques.

Client Memcached

Je recommande le client Enyim (source sur GitHub).

Pourquoi Memcached ?

J’avais besoin d’un cache performant dans un processus indépendant (survit au recyclage des processus IIS). La fonctionnalité de serveur de cache d’AppFabric (aka Velocity, aka Dublin) étant limité aux licences Windows Server Enterprise Edition, Memcached était un bon candidat. Je me suis aussi intéressé à Redis, mais il est clairement indiqué sur leur site que le support pour Windows n’est pas assez mature à ce jour pour être utilisé en production. Microsoft travaille cependant à un portage de Redis sous Windows. Projet à surveiller (en pre-release 32 bits à ce jour, pas de 64 bits)…