Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Como projetar redis pub/sub para um sistema de mensagens instantâneas?


Como sempre, você precisa comparar coisas como essa para seu próprio caso de uso - não é possível dar conselhos gerais. Pode ser necessário aumentar o número máximo de arquivos abertos em seu sistema, em todo o sistema ou para o usuário redis. Isso também se aplica ao usuário que está executando seu servidor web, é claro.

Dito isso, certifique-se de ouvir socket.on('disconnect') e quit() o assinante redis quando um usuário sai. Você também pode estar interessado em saber que o socket.io tem um back-end redis, que aproveita o redis pub/sub, e também tem o conceito de salas, para que você possa economizar alguns problemas usando isso, pois já depende do soquete .io.

Editar: Após uma verificação rápida, recebo esta mensagem de erro do Redis após 991 assinantes:
Ready check failed: Error: Error: ERR max number of clients reached

Aqui está o padrão redis.conf :
# 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

Meu sistema (Ubuntu 11.11) vem com um padrão nofile limite de 1024, então meu teste rápido deve falhar após 992 clientes conectados, o que parece certo desde o teste (eu também tenho um cliente para o editor). Minha sugestão para você é inspecionar seu nofile limite (no meu sistema está em /etc/security/limits.{conf,d/*} e seu redis maxclients configuração e, em seguida, benchmark, benchmark, benchmark!