2016-06-02 1 views
0

J'ai un cluster Redis. J'utilise le client JedisCluster pour me connecter à mon Redis.Utilisation de JedisCluster pour écrire sur une partition dans un cluster Redis

Mon application est un peu complexe et je veux essentiellement contrôler les données de partition de mon application. Par exemple, mon application consiste en un sous-module A, B, C. Ensuite, je veux que toutes les données du sous-module A passent par exemple à la partition 1. De même, les données du sous-module B devraient aller à la partition 2 par exemple et ainsi de suite. J'utilise JedisCluster, mais je ne trouve aucune API à écrire sur une partition particulière de mon cluster. Je suppose que je vais avoir les mêmes noms de partition sur tous mes nœuds Redis et gérer les données qui vont à quel noeud sera automatiquement géré mais à quelle partition sera traitée par moi.

J'ai essayé de passer par le JedisCluster lib à

https://github.com/xetorthio/jedis/blob/b03d4231f4412c67063e356a7c3acf9bb7e62534/src/main/java/redis/clients/jedis/JedisCluster.java

mais n'a pas pu trouver quoi que ce soit. S'il vous plaît aider? Merci d'avance pour l'aide.

Répondre

2

Ce n'est pas comme ça que Redis Cluster fonctionne. Avec Redis Cluster, chaque nœud (partition) a un ensemble défini de clés (slots) qu'il gère. L'écriture d'une clé sur un nœud maître qui n'est pas servi par le maître entraîne le rejet de la commande.

De l'Redis Cluster Spec:

Redis Cluster met en œuvre un concept appelé balises de hachage qui peut être utilisé pour forcer certaines clés à stocker dans le même nœud.

[...]

L'espace de clé est divisé en 16384 fentes, fixant effectivement une limite supérieure pour la taille de grappe de 16384 noeuds maîtres (cependant la taille maximale suggérée de noeuds est de l'ordre de ~ 1000 nœuds). Chaque nœud maître d'un cluster gère un sous-ensemble des 16384 emplacements de hachage.

Vous devez définir au niveau de la configuration du cluster quel noeud maître sert exclusivement un emplacement particulier ou un ensemble de logements. La configuration aboutit à la localité de données.

L'emplacement est calculé à partir de la clé. Les bonnes nouvelles sont que vous pouvez appliquer une fente particulière pour une clé à l'aide Key hash tags:

Il y a une exception pour le calcul de la fente de hachage qui est utilisé pour mettre en œuvre des balises de hachage. Les étiquettes de hachage sont un moyen de s'assurer que plusieurs clés sont allouées dans le même emplacement de hachage. Ceci est utilisé pour implémenter des opérations multi-clés dans Redis Cluster.

Exemple:

{user1000}.following 

Le contenu entre {…} est utilisée pour calculer la fente. Les clés de hachage clés vous permettent de regrouper des clés sur des nœuds particuliers et d'appliquer la même localité de données lors de l'utilisation de balises de hachage arbitraires.

Vous pouvez également aller plus loin en utilisant des balises de hachage connues qui correspondent aux emplacements (vous devez soit précalculer une table, soit this Gist).En utilisant des balises de hachage connues qui correspondent à un emplacement spécifique, vous pouvez sélectionner l'emplacement et donc le nœud maître sur lequel se trouvent les données.

Tout le reste est géré par votre client Redis.

+0

Merci pour la mise à jour. Va certainement essayer de l'utiliser. – DTCool

+0

Je passais en revue la documentation Redis et Jedis. Il y a une autre chose appelée JedisFactory qui me permet de définir un index de base de données. Cet index de base de données servira-t-il le même but? J'ai fourni le lien pour le même - https://github.com/xetorthio/jedis/blob/b03d4231f4412c67063e356a7c3acf9bb7e62534/src/main/java/redis/clients/jedis/JedisFactory.java – DTCool

+0

Plusieurs bases de données (numéros de base de données) ne sont pas pris en charge avec Redis Cluster. – mp911de