web-dev-qa-db-ja.com

Redisの名前空間?

Redisで名前空間を作成することはできますか?

私が見つけたものから、すべてのグローバルコマンド(カウント、すべて削除)はすべてのオブジェクトで機能します。これらのコマンドがコンテキストで制限されるようなサブスペースを作成する方法はありますか?

この目的のために異なるRedisサーバーをセットアップしたくありません。

答えは「いいえ」だと思いますが、なぜこれが実装されなかったのか疑問に思います。オーバーヘッドが多すぎない便利な機能のようです。

45
ripper234

Redisサーバーは、番号が付けられた複数のデータベースを処理できます。デフォルトで32個提供されていると思います。 redis-cliシェルスクリプトコマンドの-nオプションを使用して、接続引数の同様のオプションを使用するか、"select()"接続オブジェクトのメソッド。 (この場合.select()は、Python Redisモジュール...

Redisサーバーデーモンの構成ファイルに必要な個別のデータベースの数を制御するオプションもあります。上限がどうなるかわかりませんし、それを動的に変更する方法がないようです(言い換えると、追加のDBを追加するにはサーバーをシャットダウンして再起動する必要があるようです)。また、これらのDB番号を任意の種類の名前に関連付けたり、個別のACLや異なるパスワードをそれらに課したりすることはできないようです。もちろん、Redisもスキーマレスです。

33
Jim Dennis

Rubyを使用すると、次のgemを見ることができます。
https://github.com/resque/redis-namespace
https://github.com/jodosha/redis-store

1
Sergii Mostovyi

Nodeを使用している場合、 ioredis には transparent key prefixing があります。これは、コマンドの各キーに特定の文字列をクライアントに付加させることで機能します。 Rubyの redis-namespace と同じように機能します。このクライアント側のアプローチでは、すべてのキーが同じデータベースに配置されますが、少なくとも何らかの構造を追加すれば、複数のデータベースやサーバーを使用する必要はありません。

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