2012-09-26 2 views
3

Je vais exécuter redis sur un serveur dédié avec 6 cœurs, 12 threads et 32 ​​Go de RAM. J'utilise redis comme magasin de données principal. L'application a un certain nombre de hashes, d'ensembles et de listes, mais ils constituent tous la même application. Pour utiliser tous les threads, puis-je démarrer plusieurs instances de redis sur différents ports et affecter quelques structures redis à chacun. Cela aura-t-il un problème? Je suppose que dans mon code client, je dois faire de multiples connexions sur différents ports pour lire/écrire les données app ..Optimisation de Redis sur un serveur dédié multi-thread

Merci

Répondre

2

Redis étant mono-thread, vous devez démarrer plusieurs instances pour tirer parti de la bénéficier de plusieurs cœurs ou de plusieurs processeurs. Différents ports doivent être utilisés, vous devrez peut-être modifier d'autres paramètres dans les fichiers de configuration pour éviter les conflits:

  • PidFile
  • Port
  • unixsocket
  • logfile
  • dbfilename (ou bien dir)

Dans le code client, vous avez besoin d'au moins une connexion par instance Redis. Le problème principal est qu'une fois que des clés ont été ajoutées dans différentes instances, vous ne pouvez plus exécuter des commandes impliquant plusieurs clés sans vérifier d'abord que toutes les clés sont sur la même instance (par exemple, vous ne pouvez plus calculer l'intersection sur une instance Redis différente, du moins pas avec la commande SINTER).

+0

Merci Didier. Je suis heureux d'avoir reçu une réponse de quelqu'un qui est l'un des principaux experts de Redis sur SO. Je vois votre point de vue de ne pas être capable de faire des commandes sur des clés qui couvrent des instances, ce qui est une limitation importante. Cela signifierait anticiper tous les chemins d'accès qui ne sont pas toujours possibles. Si j'utilise un thread par structure de données, cela serait plus facile, car les commandes sont seulement par structure de données - de cette façon je peux utiliser jusqu'à 5 threads. Merci – mongle

+0

Je crois qu'une instance par structure de données ne volerait pas. Certaines commandes impliquent plusieurs structures de données (intersection entre set et zset, commande de tri impliquant une référence de hachage, etc ...) –

+0

En général, le mécanisme de distribution dépend de l'application. Par exemple pour les applications multi-locataires, il est logique de distribuer les données par location. Pour d'autres applications, il est généralement piloté par un critère fonctionnel. –

Questions connexes