sql >> Database >  >> NoSQL >> Redis

Hoe redis pub/sub ontwerpen voor een instant messaging-systeem?

Zoals altijd moet je dit soort dingen benchmarken voor je eigen gebruik - het is niet mogelijk om algemeen advies te geven. Mogelijk moet u het maximum aantal geopende bestanden op uw systeem verhogen, hetzij voor het hele systeem, hetzij voor de redis-gebruiker. Dit geldt natuurlijk ook voor de gebruiker die uw webserver draait.

Dat gezegd hebbende, moet je ervoor zorgen dat je luistert naar socket.on('disconnect') en quit() de redis-abonnee wanneer een gebruiker vertrekt. Misschien ben je ook geïnteresseerd om te weten dat socket.io een redis-backend heeft, die gebruikmaakt van redis pub/sub, en het heeft ook het concept van kamers, dus je kunt jezelf wat problemen besparen door dat te gebruiken, omdat je al afhankelijk bent van socket .io.

Bewerken: Na een snelle controle krijg ik deze foutmelding van Redis na 991 abonnees:

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

Hier is van de standaard 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

Mijn systeem (Ubuntu 11.11) wordt geleverd met een standaard nofile limiet van 1024, dus mijn snelle test zou moeten mislukken na 992 aangesloten clients, wat ongeveer goed lijkt uit de test (ik heb ook één client voor de uitgever). Mijn suggestie aan jou is om je nofile . te inspecteren limit (op mijn systeem staat het in /etc/security/limits.{conf,d/*} en je redis maxclients instelling, en dan benchmark, benchmark, benchmark!




  1. Transacties en wachtverklaring in Redis

  2. Meteor-app — de DB van een geïmplementeerde app opnieuw instellen

  3. TypeError:db.collection is geen functie

  4. Spring data mongo paginering