2011-12-23 1 views
35

È possibile creare spazi dei nomi in Redis?Namespace in Redis?

Da quello che ho trovato, tutti i comandi globali (contare, eliminare tutto) funzionano su tutti gli oggetti. C'è un modo per creare sub-spazi in modo tale che questi comandi siano limitati nel contesto?

Non voglio impostare diversi server Redis per questo scopo.

Suppongo che la risposta sia "No" e mi chiedo perché non sia stata implementata, in quanto sembra essere una funzione utile senza troppo sovraccarico.

risposta

30

Un server Redis può gestire più database ... che sono numerati. Penso che ne fornisca 32 di default; è possibile accedervi utilizzando l'opzione -n ​​ al comando Redis-cli scripting di shell e opzioni simili alle argomentazioni di connessione sia utilizzando il metodo "select()" sui suoi oggetti di connessione. (In questo caso .select() è il nome del metodo per il modulo Python Redis ... presumo prende il nome allo stesso modo per le altre librerie e interfacce.

C'è un'opzione per controllare il numero di database separati che si desidera nel file di configurazione per il anche il demone del server Redis. Non so quale sia il limite superiore e non sembra esserci un modo per cambiarlo dinamicamente (in altre parole sembra che dovresti arrestare e riavviare il server per aggiungere DB addizionali) Inoltre, non sembra esserci una via per associare questi numeri di DB con qualsiasi tipo di nome, né per imporre ACLS separati, né anche password diverse, ad essi. Redis, ovviamente, è senza schema bene

+0

Uno spazio dei nomi non è un database, il database è indicato con il numero (da 0 a 15). Lo spazio dei nomi è usato per aggiungere i prefissi – kalelc

+0

@kalelc: poiché il termine "spazio dei nomi" non è definito nella documentazione di Redis, non penso che la tua domanda qui sia più canonica della mia. Stavo chiarendo che ogni "database" su un dato server Redis è uno "spazio dei nomi" indipendente (le stesse chiavi non si scontreranno). Chiaramente puoi creare prefissi arbitrari e trattare quelli come "namespace" --- ma questa non è una funzione supportata in Redis; è solo una convenzione per usarlo. –

+0

Grazie a Jim per il chiarimento, a volte è confuso quando abbiamo trovato spazio dei nomi in Rails con Redis. – kalelc

0

Se si utilizza Rubino si può guardare a queste gemme:
https://github.com/resque/redis-namespace
https://github.com/jodosha/redis-store

+0

Non lo sono, ma non capisco come possano lavorare tecnicamente. Pensavo che l'API del server non li supportasse. – ripper234

+5

Questi sono solo modi per fornire un wrapper per lo più trasparente attorno all'oggetto/handle di accesso di Redis. Usando questi semplicemente antepone qualsiasi nome di chiave che usi nel tuo codice con il prefisso "namespace" durante qualsiasi riferimento a qualsiasi tipo di oggetto in quel "namespace". Come hai immaginato, non c'è isolamento di questi dal lato server, esistono semplicemente come convenzioni, forse persino standard interni. –

+1

Ti dice in cima alla libreria 'redis-namespace', è il namespace di un povero, verrà solo il prefisso con" ns: * ". –