sql >> Base de Datos >  >> NoSQL >> Redis

¿Cómo diseñar redis pub/sub para un sistema de mensajería instantánea?

Como siempre, debe comparar cosas como esta para su propio caso de uso; no es posible dar consejos generales. Es posible que deba aumentar la cantidad máxima de archivos abiertos en su sistema, ya sea para todo el sistema o para el usuario de redis. Esto también se aplica al usuario que ejecuta su servidor web, por supuesto.

Dicho esto, debe asegurarse de escuchar socket.on('disconnect') y quit() el suscriptor de redis cuando un usuario se va. También le puede interesar saber que socket.io tiene un backend redis, que aprovecha redis pub/sub, y también tiene el concepto de salas, por lo que puede ahorrarse algunos problemas al usarlo, ya que depende del socket. .io.

Editar: Después de una revisión rápida, recibo este mensaje de error de Redis después de 991 suscriptores:

Ready check failed: Error: Error: ERR max number of clients reached

Aquí está el redis.conf predeterminado :

# Set the max number of connected clients at the same time. By default
# this limit is set to 10000 clients, however if the Redis server is not
# able ot configure the process file limit to allow for the specified limit
# the max number of allowed clients is set to the current file limit
# minus 32 (as Redis reserves a few file descriptors for internal uses).
#
# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
#
# maxclients 10000

Mi sistema (Ubuntu 11.11) viene con un nofile predeterminado límite de 1024, por lo que mi prueba rápida debería fallar después de 992 clientes conectados, lo que parece correcto desde la prueba (también tengo un cliente para el editor). Mi sugerencia para usted es inspeccionar su nofile limit (en mi sistema está en /etc/security/limits.{conf,d/*} y su redis maxclients ajuste, y luego punto de referencia, punto de referencia, punto de referencia!