Redisで名前空間を作成することはできますか?
私が見つけたものから、すべてのグローバルコマンド(カウント、すべて削除)はすべてのオブジェクトで機能します。これらのコマンドがコンテキストで制限されるようなサブスペースを作成する方法はありますか?
この目的のために異なるRedisサーバーをセットアップしたくありません。
答えは「いいえ」だと思いますが、なぜこれが実装されなかったのか疑問に思います。オーバーヘッドが多すぎない便利な機能のようです。
Redisサーバーは、番号が付けられた複数のデータベースを処理できます。デフォルトで32個提供されていると思います。 redis-cliシェルスクリプトコマンドの-nオプションを使用して、接続引数の同様のオプションを使用するか、"select()"
接続オブジェクトのメソッド。 (この場合.select()
は、Python Redisモジュール...
Redisサーバーデーモンの構成ファイルに必要な個別のデータベースの数を制御するオプションもあります。上限がどうなるかわかりませんし、それを動的に変更する方法がないようです(言い換えると、追加のDBを追加するにはサーバーをシャットダウンして再起動する必要があるようです)。また、これらのDB番号を任意の種類の名前に関連付けたり、個別のACLや異なるパスワードをそれらに課したりすることはできないようです。もちろん、Redisもスキーマレスです。
Rubyを使用すると、次のgemを見ることができます。
https://github.com/resque/redis-namespace
https://github.com/jodosha/redis-store
Nodeを使用している場合、 ioredis には transparent key prefixing があります。これは、コマンドの各キーに特定の文字列をクライアントに付加させることで機能します。 Rubyの redis-namespace と同じように機能します。このクライアント側のアプローチでは、すべてのキーが同じデータベースに配置されますが、少なくとも何らかの構造を追加すれば、複数のデータベースやサーバーを使用する必要はありません。
var fooRedis = new Redis({ keyPrefix: 'foo:' });
fooRedis.set('bar', 'baz'); // Actually sends SET foo:bar baz