Comment mettre en œuvre les notifications d’espace clé Redis dans ElastiCache ?

Lecture de 6 minute(s)
0

Je souhaite mettre en œuvre les notifications d’espace clé Redis dans Amazon ElastiCache.

Brève description

Les notifications d’espace de clé Redis vous permettent de vous abonner aux chaînes PubSub. Ces canaux transmettent les événements publiés lorsqu’une commande Redis ou une modification des données se produisent. Ces notifications sont utiles si une application doit réagir à des modifications apportées à la valeur stockée dans certaines clés. Vous pouvez également vous servir des notifications d’espace de clé Redis pour suivre les modifications apportées à des jeux de données. La fonctionnalité de notifications d’espace de clé est disponible dans les versions 2.8.6 et ultérieures. Lorsqu’une notification d’espace de clé Redis est invoquée, cela génère une notification d’espace de clé et une notification d’événement de clé. Le canal d’espace de clé reçoit le nom de l’événement et le canal d’événement de clé reçoit le nom de la clé sous forme de message.

Solution

Remarque : La solution suivante fonctionne avec les clusters ElastiCache dont le mode cluster est désactivé. Pour plus d’informations, consultez la section Redis keyspace notifications sur le site Web de Redis.

Voici comment mettre en œuvre les notifications d’espace de clé Redis dans ElastiCache :

Activation des notifications d’espace de clé Redis

Remarque : Par défaut, ElastiCache désactive les notifications d’espace de clé Redis. Pour activer les notifications d’espace de clé dans un groupe de paramètres de cache personnalisé, utilisez le paramètre notify-keyspace-events. Cette valeur de paramètre détermine le canal (espace de clé ou événement de clé) à utiliser et les informations à publier sur ce canal en fonction de plusieurs paramètres. Pour en savoir plus, consultez la section Paramètres ajoutés Redis 2.8.6.

  1. Ouvrez la console ElastiCache.
  2. Pour afficher la liste des groupes de paramètres disponibles, choisissez Groupes de paramètres dans le volet de navigation.
  3. Sélectionnez le groupe de paramètres que vous souhaitez modifier.
    **Remarque :**Il est impossible de modifier un groupe de paramètres par défaut. Si tous les groupes de paramètres de la liste sont définis par défaut, créez un nouveau groupe de paramètres.
  4. (Facultatif) Pour créer un nouveau groupe de paramètres, sélectionnez Créer un groupe de paramètres :
    Dans le champ Nom, entrez un nom unique.
    Entrez une description dans le champ Description.
    Sélectionnez une famille.
    Choisissez Créer.
  5. Choisissez Modifier les valeurs des paramètres.
  6. Accédez à notify-keyspace-events, puis saisissez AKE dans le champ Valeur. Pour plus d’informations sur les valeurs autorisées, consultez la section Paramètres ajoutés Redis 2.8.6.
  7. Choisissez Enregistrer les modifications. Les modifications prennent effet immédiatement et il n’est pas nécessaire de redémarrer le cluster.
    **Remarque :**Veillez à attribuer le nouveau groupe de paramètres modifié à votre cluster Redis.

Génération d’événements

Vous pouvez générer des événements à partir de l’interface de ligne de commande (CLI) Redis ou du client Redis Python :

**Utiliser l’interface de ligne de commande Redis (redis-cli) **

  1. Pour vous abonner aux notifications, exécutez la commande suivante à parti de redis-cli :

    #./redis-cli -h testdisabled.xxxxx.ng.0001.use1.cache.amazonaws.com -p 6379 --csv psubscribe '__key*__:*'
  2. Pour créer des événements d’espace de clé, exécutez n’importe quel ensemble de commandes. Les exemples de commandes suivants définissent la valeur et le délai d'expiration à 3 secondes pour la clé Redis et l'abonné dans le cas d’événements expirés.

    #./redis-cli -h testdisabled.xxxxx.ng.0001.use1.cache.amazonaws.com -p 6379
    testdisabled.xm4oz6.ng.0001.use1.cache.amazonaws.com:6379>
    testdisabled.xm4oz6.ng.0001.use1.cache.amazonaws.com:6379> SET key1 value1 ex 5
    testdisabled.xm4oz6.ng.0001.use1.cache.amazonaws.com:6379>
  3. Vérification des événements générés. Voici un exemple de sortie à partir des événements générés :

    #./redis-cli -h testdisabled.xxxxx.ng.0001.use1.cache.amazonaws.com -p 6379 --csv psubscribe '__key*__:*'
    Reading messages... (press Ctrl-C to quit)
    "psubscribe","__key*__:*",1
    "pmessage","__key*__:*","__keyspace@0__:key1","set"
    "pmessage","__key*__:*","__keyevent@0__:set","key1"
    "pmessage","__key*__:*","__keyspace@0__:key1","expire"
    "pmessage","__key*__:*","__keyevent@0__:expire","key1"
    "pmessage","__key*__:*","__keyspace@0__:key1","expired"
    "pmessage","__key*__:*","__keyevent@0__:expired","key1"

    Dans l’exemple de sortie précédent, le premier événement indique que vous avez réussi à vous abonner à une chaîne. Le second événement est une notification d’espace de clé qui indique comme message le nom de l’événement défini. Le troisième événement est une notification d’événement de clé qui indique comme message le nom de clé key1. Après le troisième événement, les messages d’expiration des notifications d’espace de clé et d’événement de clé apparaissent.

Utilisation du client Redis Python (redis-py)

  1. Pour vous abonner aux notifications, utilisez un script Python 2 ou Python 3.
    Remarque : Les scripts suivants s’abonnent à toutes les notifications d’espace de clé et affichent les événements reçus.
    Python 2 :

    # cat subscribe.py
    import redis
    import datetime
    import time
    r = redis.Redis(host='testdisabled.xxxxx.ng.0001.use1.cache.amazonaws.com', port=6379, db=0)
    #Subscribing for events matching pattern "__key*__:*"
    p = r.pubsub()
    p.psubscribe('__key*__:*')
    print('Starting message loop')
    while True:
        message = p.get_message()
        if message:
            print datetime.datetime.now(), message
        else:
            time.sleep(0.01)

    Python 3 :

    import redis
    from datetime import datetime
    import time
    r = redis.Redis(host = 'testdisabled.xxxxx.ng.0001.use1.cache.amazonaws.com', port = 6379, db = 0)
    #Subscribing for events matching pattern "__key*__:*
    p = r.pubsub()
    p.psubscribe('__key*__:*')
    print('Starting message loop')
    while True:
        message = p.get_message()
        if message:
            print (datetime.now(), message)
        else:
            time.sleep(0.01)

    **Remarque :**Une surcharge du serveur peut survenir lorsque des valeurs plus faibles ou l’absence de veille obligent le client à interroger constamment le canal. Des valeurs plus élevées entraînent une augmentation de l’utilisation de la mémoire sur le serveur. Les scripts précédents ont défini time.sleep sur 0,01.

  2. Dans une session distincte, connectez-vous au cluster, puis exécutez le script createkey.py pour définir ou faire expirer les clés :
    **Remarque :**Veillez à bien définir example-key en tant que clé et example-value en tant que valeur. De plus, indiquez une valeur de 3 secondes pour le délai d’expiration.

    # cat createkey.py
    import redis
    r = redis.Redis(host='testdisabled.xxxxx.ng.0001.use1.cache.amazonaws.com', port=6379, db=0)
    r.set('example-key','example-value')
    r.expire('example-key',3)
  3. Dans une session distincte, exécutez le script subscribe.py.
    Exemple de sortie :

    # python2 subscribe.py
    Starting message loop
    2024-04-29 23:40:56.356659 {u'pattern': None, u'type': 'psubscribe', u'channel': '__key*__:*', u'data': 1L}
    2024-04-29 23:40:56.356659 {u'pattern': None, u'type': 'psubscribe', u'channel': '__key*__:*', u'data': 1L}
    2024-04-29 23:41:00.016410 {u'pattern': '__key*__:*', u'type': 'pmessage', u'channel': '__keyspace@0__:example-key', u'data': 'set'}
    2024-04-29 23:41:00.016512 {u'pattern': '__key*__:*', u'type': 'pmessage', u'channel': '__keyevent@0__:set', u'data': 'example-key'}
    2024-04-29 23:41:00.016582 {u'pattern': '__key*__:*', u'type': 'pmessage', u'channel': '__keyspace@0__:example-key', u'data': 'expire'}
    2024-04-29 23:41:00.016650 {u'pattern': '__key*__:*', u'type': 'pmessage', u'channel': '__keyevent@0__:expire', u'data': 'example-key'}
    2024-04-29 23:41:03.111509 {u'pattern': '__key*__:*', u'type': 'pmessage', u'channel': '__keyspace@0__:example-key', u'data': 'expired'}
    2024-04-29 23:41:03.111601 {u'pattern': '__key*__:*', u'type': 'pmessage', u'channel': '__keyevent@0__:expired', u'data': 'example-key'}

    **Remarque :**Une fois que vous avez terminé la commande précédente, votre écouteur de clé Redis est prêt.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an