2011-12-23 5 views
35

Возможно ли создать пространство имен в Редисе?Пространства имен в Редисе?

Из того, что я нашел, все глобальные команды (счет, удалить все) работают на всех объектах. Есть ли способ создать подпространства, чтобы эти команды были ограничены в контексте?

Для этой цели я не хочу настраивать разные серверы Redis.

Я предполагаю, что ответ «Нет», и задаться вопросом, почему это не было реализовано, поскольку это кажется полезной функцией без слишком больших издержек.

ответ

30

Сервер Redis может обрабатывать несколько баз данных ..., которые нумеруются. Я думаю, что он предоставляет 32 из них по умолчанию; Вы можете получить доступ к ним с помощью опции -n к Redis-интерфейс командной оболочки сценариев и аналогичными вариантами для аргументов соединения или с помощью метода "select()" на своих объектах связи. (В этом случае .select() это имя методы для модуля Python Redis ... Я полагаю, что это называется так же как и для других библиотек и интерфейсов.

Там есть возможность контролировать сколько отдельных базы данных вы хотите в файле конфигурации для как и предыдущий сервер Redis. Я не знаю, каков будет верхний предел, и, похоже, не существует способа динамически изменить это (другими словами, кажется, что вам придется выключать и перезапускать сервер, чтобы добавьте дополнительные БД). Кроме того, похоже, что им не удастся связать эти номера БД с каким-либо именем или наложить на них отдельные ACLS и даже разные пароли. Redis, конечно, не имеет схемы хорошо.

+0

Пространство имен не является базой данных, база данных обозначается номером (от 0 до 15). Пространство имен используется для добавления префиксов – kalelc

+0

@kalelc: поскольку термин «пространство имен» не определен в документации Redis, я не думаю, что ваше применение термина здесь более каноническое, чем мое. Я пояснил, что каждая «база данных» на данном сервере Redis является независимым «пространством имен» (идентичные ключи не будут сталкиваться). Ясно, что вы можете создавать произвольные префиксы и рассматривать их как «пространства имен» --- но это не какая-либо специально поддерживаемая функция в Redis; это просто соглашение об использовании этого. –

+0

Поблагодарите Джима за разъяснения, иногда сбивает с толку, когда мы нашли пространство имен в Rails с Redis. – kalelc

0

Если вы используете Ruby, вы можете посмотреть на эти драгоценные камни:
https://github.com/resque/redis-namespace
https://github.com/jodosha/redis-store

+0

Я не, но я не понимаю, как они могут работать технически. Я думал, что API-интерфейс сервера не поддерживает их. – ripper234

+5

Это просто способы обеспечить прозрачную обертку вокруг объекта/дескриптора Redis. Использование этих параметров просто добавляет любые имена ключей, которые вы используете в своем коде, с префиксом «namespace» во время любой ссылки на какой-либо объект в этом «пространстве имен». Как вы догадались, их нет на стороне сервера, они существуют только как условные обозначения, возможно, даже внутренние стандарты. –

+1

Он говорит вам в верхней части библиотеки 'redis-namespace', это пространство имен бедных людей, оно просто префиксное все с помощью« ns: * ». –

Смежные вопросы