Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
¿Cómo implemento las notificaciones del espacio de claves de Redis en ElastiCache?
Quiero implementar las notificaciones del espacio de claves de Redis en Amazon ElastiCache.
Descripción corta
Las notificaciones del espacio de claves de Redis le permiten suscribirse a los canales de PubSub. A través de estos canales, los eventos publicados se reciben cuando se produce un comando de Redis o una alteración de los datos. Estas notificaciones son útiles cuando una aplicación debe responder a los cambios que se producen en el valor almacenado en claves específicas. Además, puede usar las notificaciones del espacio de claves de Redis para seguir los cambios en el conjunto de datos. La característica de notificaciones del espacio de claves está disponible en las versiones 2.8.6 y posteriores. Cuando se invoca una notificación del espacio de claves de Redis, se produce una notificación del espacio de claves y una notificación del evento de claves. El canal del espacio de claves recibe el nombre del evento y el canal del evento de claves recibe el nombre de la clave como mensaje.
Resolución
Nota: La siguiente resolución se aplica a los clústeres de ElastiCache con el modo de clúster desactivado. Para obtener más información, consulte las notificaciones del espacio de claves de Redis en el sitio web de Redis.
Para implementar las notificaciones del espacio de claves de Redis en ElastiCache, siga estos pasos:
Activar las notificaciones del espacio de claves de Redis
Nota: De forma predeterminada, ElastiCache desactiva las notificaciones del espacio de claves de Redis. Para activar las notificaciones del espacio de claves en un grupo de parámetros de caché personalizado, utilice el parámetro notify-keyspace-events. Este valor de parámetro usa varios parámetros para determinar qué canal (espacio de claves o evento de claves) se usa y la información que se debe publicar en el canal. Para obtener más información, consulte los parámetros agregados de Redis 2.8.6.
- Abra la consola de ElastiCache.
- Para ver una lista de los grupos de parámetros disponibles, elija Grupos de parámetros en el panel de navegación.
- Seleccione el grupo de parámetros que quiera modificar.
Nota: No puede modificar un grupo de parámetros predeterminado. Si todos los grupos de parámetros de la lista son predeterminados, cree un nuevo grupo de parámetros. - (Opcional) Para crear un nuevo grupo de parámetros, elija Crear grupo de parámetros:
En el campo Nombre, introduzca un nombre único.
Introduzca una descripción en el campo Descripción.
Seleccione una familia.
Seleccione Crear. - Seleccione Editar valores de parámetros.
- Vaya a notify-keyspace-events y, a continuación, introduzca AKE en el campo Valor. Para obtener más información sobre los valores permitidos, consulte los parámetros agregados de Redis 2.8.6.
- Seleccione Guardar cambios. Los cambios surten efecto inmediatamente y no es necesario reiniciar el clúster.
Nota: Asegúrese de asignar el nuevo grupo de parámetros modificado a su clúster de Redis.
Generación de eventos
Para generar eventos, utilice la interfaz de la línea de comandos (CLI) de Redis o el cliente Python de Redis:
Uso de la CLI de Redis (redis-cli)
-
Para suscribirse a las notificaciones, utilice redis-cl para ejecutar el siguiente comando:
#./redis-cli -h testdisabled.xxxxx.ng.0001.use1.cache.amazonaws.com -p 6379 --csv psubscribe '__key*__:*'
-
Para crear eventos de espacio de claves, ejecute cualquier conjunto de comandos. Los siguientes comandos de ejemplo establecen el valor y el tiempo de vencimiento en 3 segundos para la clave de Redis y el suscriptor para los eventos vencidos.
#./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>
-
Confirme que los eventos se generan. A continuación se muestra un ejemplo de salida de los eventos generados:
#./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"
Para el resultado del ejemplo anterior, el primer evento indica que se ha suscrito correctamente a 1 canal. El segundo evento es una notificación del espacio de claves que indica el nombre del evento establecido como mensaje. El tercer evento es una notificación del evento de claves que indica el nombre de la clave key1 como mensaje. Tras el tercer evento, puede ver los mensajes de vencimiento de las notificaciones del espacio de claves y evento de claves.
Uso del cliente Python de Redis (redis-py)
-
Para suscribirse a las notificaciones, utilice un script de Python 2 o Python 3.
Nota: Los siguientes scripts se suscriben a todas las notificaciones de espacio de claves e imprimen los eventos recibidos.
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)
Nota: La sobrecarga del servidor puede producirse cuando los valores más bajos o la ausencia de suspensión hacen que el cliente sondee constantemente el canal. Los valores más altos provocan un mayor uso de memoria en el servidor. Los scripts anteriores establecen time.sleep en 0.01.
-
En otra sesión, conéctese al clúster y, a continuación, ejecute el script createkey.py para establecer o hacer caducar las claves:
Nota: Asegúrese de establecer example-key como clave y example-value como valor. Además, utilice un valor de 3 segundos para el tiempo de vencimiento.# 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)
-
En otra sesión, ejecute el script subscribe.py.
Resultado de ejemplo:# 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'}
Nota: Tras completar el comando anterior, el agente de escucha de la clave de Redis estará listo.
Vídeos relacionados


Contenido relevante
- preguntada hace 3 meseslg...
- preguntada hace 2 meseslg...
- preguntada hace 3 meseslg...
- preguntada hace 2 meseslg...