回答:
Redisのキーの通常の命名規則は何ですか?で区切られた値を見たことがありますが、通常の規則が何であるか、またはその理由がわかりません。
はい、コロン記号:
はキーの命名規則です。ではこの Redisのウェブサイト上のチュートリアルに述べている:スキーマに固執するようにしてください。たとえば、「user-1000:password」のように、「object-type:id:field」は良いアイデアです。「comment:1234:reply.to」のように、複数単語のフィールドにドットを使用するのが好きです。
すべてのユーザーを返すために、キーの先頭のみを照会できますか?
で始まるすべてのキーを直接照会するようなことを意味する場合user:
は、それに対応するkeysコマンドがあります。ただし、このコマンドは、データベースに格納されているすべてのキーを検索するため、O(N)であるため、デバッグ目的でのみ使用する必要があります。
この問題のより適切な解決策は、専用のキーを作成することです。名前をにするとusers
、すべてのユーザーのキーがリストやデータ構造などに格納されます。
$redis->delete($redis->keys('user:password:*'));
コロン(:)を名前空間の区切り文字として使用し、ハッシュ(#)をキーのID部分に使用します。例:
logistics:building#23
規約はコロン(:)のように見えますが、私はWeb開発者なので、個人的には区切り記号としてスラッシュ(/)を好みます。スラッシュはURL内ですでに非常に重要な区切り文字であり、Uniform Resource Locatorであるため、リソースのキーの一種です。なぜコロン(:)で別のアプローチを取るのですか?それは何か助けになりますか?
この例を考えてみましょう:
我々は持っているRESTfulなおもちゃのオブジェクトのためのAPIを。1つあります。
http://example.com/api/toy/234
どこに保管していますか?Redisとスラッシュを使用しているため、キーは明白です。
toy/234
これはおもちゃのユニークなキーです。キーはクライアント側でも使用できるようになりました。
{
key: "toy/234",
color: "red",
url: function () {
return API_BASE_URL + this.key;
}
}
ユーザーがkeyでオブジェクトをリクエストしますtoy/666
。Redisから入手する方法は?Node.js関連の例:
redis.get(key, function reply_callback(error, toystring) {
var toy = JSON.parse(toystring);
...
}
スラッシュをコロンに、またはその逆に変換する必要はありません。便利だと思いませんか?
注:ユーザーが意図したものにのみアクセスできることを常に確認してください。上記の生のURLからキーへのアプローチはuser/1/password
、コメンテーターによって指摘されているように、フェッチすることもできます。Redisを読み取り専用のパブリックキャッシュとして使用する場合、これは問題になりません。
curl http://example.com/api/user/1/password
「d」または同様のものを得ることを懇願しています。(ただ言うだけです。)
User#23:uploads:my/path/to/file.ext
Redisのキーの命名に「ベストプラクティス」が本当に広く普及しているかどうかはまだわかりません。
ASCII NUL文字をセパレーターとして使用して実験しました(RedisとPythonはどちらも8ビットクリーンであるため)。生のキーを見ると少し見苦しいように見えますが、その概念は抽象化レイヤーの背後にそれを隠すことです。コロンとパイプ記号は、名前空間のコンポーネントがそれらを使用しないことが保証されているか、必要に応じて各コンポーネントをエンコードする用意があるかぎり、明白な代替手段です。ただし、それらをエンコードする場合は、抽象化レイヤーを開発し、とにかく生のキーを表示しないようにする必要があります。これにより、推論で\ 0を使用するようになりました。
これについて他の意見が明確にされているかどうかを確認するのは興味深いことです。
scan
オプション@EranHではありません。キーを反復することがベストプラクティスです。scan
要素のコレクションを段階的に反復するために使用されます。