2011-12-23 36 views
35

¿Es posible crear espacios de nombres en Redis?¿Espacios de nombres en Redis?

Según lo que encontré, todos los comandos globales (contar, borrar todo) funcionan en todos los objetos. ¿Hay alguna manera de crear subespacios de modo que estos comandos estén limitados en contexto?

No deseo configurar diferentes servidores Redis para este fin.

Supongo que la respuesta es "No", y me pregunto por qué no se implementó esto, ya que parece ser una función útil sin demasiados gastos generales.

Respuesta

30

Un servidor Redis puede manejar múltiples bases de datos ... que están numeradas. Creo que proporciona 32 de ellos por defecto; puede acceder a ellos utilizando la opción -n al comando de script de shell redis-cli y mediante opciones similares a los argumentos de conexión o utilizando el método "select()" en sus objetos de conexión. (En este caso .select() es el nombre del método para el módulo Python Redis ... supongo que es llamado de manera similar para otras bibliotecas e interfaces.

Hay una opción para controlar el número de bases de datos separada que desee en el archivo de configuración para el daemon del servidor Redis también. No sé cuál sería el límite superior y no parece haber una forma de cambiarlo dinámicamente (en otras palabras, parece que tendrías que apagar y reiniciar el servidor para agregar DB adicionales). Además, no parece estar lejos de asociar estos números de DB con ningún tipo de nombre ni de imponer ACLS separados, ni siquiera contraseñas diferentes. Redis, por supuesto, no tiene esquemas como bien.

+0

Un espacio de nombres no es una base de datos, la base de datos se indica mediante el número (0 a 15). El espacio de nombres se usa para agregar prefijos – kalelc

+0

@kalelc: dado que el término "espacio de nombres" no está definido en la documentación de Redis, no creo que su aplicación del término aquí sea más canónica que la mía. Estaba aclarando que cada "base de datos" en un servidor Redis determinado es un "espacio de nombres" independiente (que claves idénticas no colisionarán). Claramente puede crear prefijos arbitrarios y tratarlos como "espacios de nombres" --- pero esta no es ninguna característica especialmente compatible en Redis; es solo una convención para usarlo. –

+0

Gracias a Jim por la aclaración, a veces es confuso cuando encontramos el espacio de nombres en Rails con Redis. – kalelc

0
+0

No lo soy, pero no entiendo cómo pueden funcionar técnicamente. Pensé que la API del servidor no los admite. – ripper234

+5

Estas son simplemente formas de proporcionar una envoltura casi transparente alrededor del objeto/identificador de acceso de Redis. El uso de estos simplemente antepone los nombres de teclas que utiliza en su código con el prefijo "espacio de nombres" durante cualquier referencia a cualquier tipo de objeto en ese "espacio de nombres". Como suponía, no hay aislamiento de estos en el lado del servidor, existen simplemente como convenciones, tal vez incluso normas internas. –

+1

Te dice en la parte superior de la biblioteca 'redis-namespace', es un espacio de nombres de un hombre pobre, simplemente prefijará todo con" ns: * ". –