Redis
 sql >> Database >  >> NoSQL >> Redis

Come progettare redis pub/sub per un sistema di messaggistica istantanea?

Come sempre, è necessario confrontare cose come questa per il proprio caso d'uso:non è possibile fornire consigli generali. Potrebbe essere necessario aumentare il numero massimo di file aperti sul sistema, a livello di sistema o per l'utente redis. Questo vale anche per l'utente che esegue il tuo server web, ovviamente.

Detto questo, dovresti assicurarti di ascoltare socket.on('disconnect') e quit() l'abbonato redis quando un utente lascia. Potresti anche essere interessato a sapere che socket.io ha un backend redis, che sfrutta redis pub/sub, e ha anche il concetto di stanze, quindi potresti risparmiarti qualche problema usandolo dato che dipendi già dal socket .io.

Modifica: Dopo un rapido controllo, ricevo questo messaggio di errore da Redis dopo 991 iscritti:

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

Ecco il redis.conf predefinito :

# 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

Il mio sistema (Ubuntu 11.11) viene fornito con un nofile predefinito limite di 1024, quindi il mio test rapido dovrebbe fallire dopo 992 client connessi, il che sembra proprio dal test (ho anche un client per l'editore). Il mio suggerimento è di controllare il tuo nofile limit (sul mio sistema è in /etc/security/limits.{conf,d/*} e il tuo redis maxclients impostazione e poi benchmark, benchmark, benchmark!