Azure Redis Cache

Dans un précédent article, j’avais rappelé les principes de mise en œuvre d’un service de cache et fait l’inventaire des options proposées nativement sur Azure. J’avais évoqué le nouveau service Azure Redis Cache. L’objet de cet article est de présenter ses principales fonctions, de décrire son API, et ses caractéristiques en terme de performances et de scalabilité.

Fonctions

Redis offre un stockage de type de clé-valeur, dont les clés peuvent contenir des structures de données telles que des chaînes, des hachages, des listes, ou des ensembles triés ou non.

Redis propose un ensemble d'opérations atomiques sur ces types de données.

Le cache Redis est proposé avec de multiples tailles allant jusqu'à 26 Go.

Pour utiliser Azure Redis Cache, il suffit de créer un cache avec le nouvel portail Azure et d’utiliser le endpoint (« xxx.redis.cache.windows.net ») qui expose l’accès à ce cache, à partir de n'importe quel client supportant Redis.

image

Il est également possible de surveiller la santé et la performance du cache depuis ce portail.

image

Enfin, les échanges peuvent être sécurisés avec SSL, et l'authentification est un mécanisme propre à Redis.

L’API cliente pour Azure Redis Cache

Redis peut être utilisé depuis la plupart des langages de programmation. Il peut-être testé localement indépendamment d’Azure. Il offre la gestion des transactions ainsi que des mécanismes de publication-souscription. L’API .NET est mise à disposition via le package NuGet « StackExchange.Redis ».

image

Les méthodes qu’expose l’interface IDatabase pour l’interaction avec le cache (StringGet,…) peuvent être simplifiées avec une classe d’extension pour intégrer un mécanisme de sérialisation comme proposé dans l’article « MVC movie app with Azure Redis Cache in 15 minutes » :

public static class SampleStackExchangeRedisExtensions

{

  public static T Get<T>(this IDatabase cache, string key)

  {

      return Deserialize<T>(cache.StringGet(key));

  }

  public static object Get(this IDatabase cache, string key)

  {

      return Deserialize<object>(cache.StringGet(key));

  }

  public static void Set(this IDatabase cache, string key, object value)

  {

      cache.StringSet(key, Serialize(value));

  }

  static byte[] Serialize(object o)

  {

       //...

  }

  static T Deserialize<T>(byte[] stream)

  {

       //...

   }

}

Le code associé à cet article propose également l’implémentation de quelques tests permettant de mesurer les performances liées à de multiples lectures-écritures sur Azure Redis Cache.

Performance et scalabilité

Azure Redis Cache est conçu pour rendre l’application plus réactive, même à forte charge, en capitalisant sur la faible latence, et les capacités haut débit du moteur Redis. Ce service de cache distribué permet d’offrir plus de scalabilité en permettant aux différentes ressources frontend et backend de l’application d’évoluer de façon indépendante.

Pour augmenter la disponibilité des données mises en cache en cas de dysfonctionnement du service, Redis supporte nativement une configuration de réplication maître-esclave (directement gérée depuis le nouveau portail Azure) offrant des caractéristiques telles qu’une première synchronisation très rapide et non bloquante, l’auto-reconnexion, etc… Le niveau de disponibilité du service est fonction des options de facturation :

• Basic : Un seul nœud.

• Standard : Deux nœuds maître/esclave. Avec SLA et support de la réplication.

Conclusion

En conclusion, un Azure Redis Cache est un service de cache très simple à configurer et à superviser via le nouveau portail Azure. Son API est disponible pour de multiples environnements de programmation. Il est très performant et propose dans le mode standard, un mécanisme de réplication garantissant sa resilience.