54 votes

Les espaces de noms dans Redis ?

Est-il possible de créer des espaces de noms dans Redis ?

D'après ce que j'ai trouvé, toutes les commandes globales (compter, supprimer tout) fonctionnent sur tous les objets. Existe-t-il un moyen de créer des sous-espaces de sorte que ces commandes soient limitées dans leur contexte ?

Je ne veux pas configurer différents serveurs Redis à cette fin.

Je suppose que la réponse est "Non", et je me demande pourquoi cela n'a pas été implémenté, car cela semble être une fonctionnalité utile sans trop de frais généraux.

38voto

Jim Dennis Points 5454

Un serveur Redis peut gérer plusieurs bases de données... qui sont numérotées. Je pense qu'il en fournit 32 par défaut ; vous pouvez y accéder en utilisant la fonction -n à l'option redis-cli et par des options similaires aux arguments de connexion ou en utilisant la commande de script shell "select()" sur ses objets de connexion. (Dans ce cas .select() est le nom de la méthode pour le module Python Redis ... Je suppose que le nom est similaire pour les autres bibliothèques et interfaces.

Il existe également une option permettant de contrôler le nombre de bases de données séparées que vous souhaitez dans le fichier de configuration du démon serveur Redis. Je ne sais pas quelle est la limite supérieure et il ne semble pas y avoir de moyen de la modifier dynamiquement (en d'autres termes, il semble que vous deviez arrêter et redémarrer le serveur pour ajouter des bases de données supplémentaires). De même, il ne semble pas y avoir de moyen d'associer ces numéros de BD à une sorte de nom, ni d'imposer des ACLS distincts, ni même des mots de passe différents, à ces BD. Redis, bien sûr, est également sans schéma.

7voto

Danny Guo Points 164

Si vous utilisez Node, ioredis tiene préfixation transparente des clés qui fonctionne en demandant au client de faire précéder chaque clé d'une commande d'une chaîne donnée. Il fonctionne de la même manière que la méthode Ruby redis-namespace fait. Cette approche côté client place toujours toutes vos clés dans la même base de données, mais au moins vous ajoutez une certaine structure, et vous ne devez pas utiliser plusieurs bases de données ou serveurs.

var fooRedis = new Redis({ keyPrefix: 'foo:' });
fooRedis.set('bar', 'baz');  // Actually sends SET foo:bar baz

2voto

sergey_mo Points 232

Si vous utilisez Ruby, vous pouvez regarder ces joyaux :
https://github.com/resque/redis-namespace
https://github.com/jodosha/redis-store

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X