Redisのキーの通常の命名規則は何ですか?値が:
で区切られているのを見たことがありますが、通常の規約が何であるか、またはその理由がわかりません。ユーザーのIDが00
Redisキーの命名規則
は、すべてのユーザーを返すために、キーのほんの始まりを照会することができていますした場合は、ユーザーのために
あなたが何かのような...
user:00
を行うだろう?
私は主に、人々のために働く方法とその理由を研究することで、将来の問題を避けることを望んでいます。
Redisのキーの通常の命名規則は何ですか?値が:
で区切られているのを見たことがありますが、通常の規約が何であるか、またはその理由がわかりません。ユーザーのIDが00
Redisキーの命名規則
は、すべてのユーザーを返すために、キーのほんの始まりを照会することができていますした場合は、ユーザーのために
あなたが何かのような...
user:00
を行うだろう?
私は主に、人々のために働く方法とその理由を研究することで、将来の問題を避けることを望んでいます。
redisのキーの通常の命名規則は何ですか? の値は次のように区切られていますが、通常の規則である 、またはその理由がわかりません。
はい、コロン記号:
は、キーを命名するときの規則です。 thisでredisウェブサイトのチュートリアルが記載されています:スキーマを固執してみてください。たとえば、 "object-type:id:field"は "user:1000:password"のように という素晴らしいアイデアです。私は マルチワードフィールドのドットを "comment:1234:reply.to"のように使用します。
すべて のユーザーを返すために、キーのほんの始まりを照会することができますか?
あなたは直接そのためkeysコマンドがあるuser:
で始まるすべてのキーを照会などのいろいろ書いを意味する場合。ただし、このコマンドはデバッグの目的でのみ使用する必要があります.O(N)です。これは、データベース内のすべてのキーを検索しているためです。
この問題のより適切なソリューションは、listまたはsetのデータ構造など、すべてのユーザーキーを格納するusers
という名前の専用キーを作成することです。
Redisのキーネーミングには、まだ「ベストプラクティス」が広く普及しているかどうかはわかりません。
私はセパレータとしてASCII NUL文字を使用して実験しました(RedisとPythonはどちらも8ビットクリーンなので)。生のキーを見ていると少し醜いですが、考え方は抽象レイヤの背後に隠すことです。コロンとパイプ記号は、名前空間のコンポーネントがそれらを使用しないことが保証されているか、必要に応じて各コンポーネントをエンコードする意思がある限り、明白な選択肢です。しかし、もしあなたがそれらをエンコードするなら、抽象レイヤーを開発して、とにかく生の鍵を見ることを避けたいと思うでしょう。それは私の主張に\ 0を使用するだけに私を戻しました。
これに他の意見が明記されているかどうかは面白いでしょう。
名前空間の区切り文字としてコロン(:)を使用し、キーのid-partにハッシュ(#)を使用します。:
logistics:building#23
ロケール、カテゴリなどのキーが多い場合、 {リソース}:{キー}#{値}、{キー}#{値} =>テキスト:ロケール#en、カテゴリ#15?それとも、他の提案がありますか? – fsasvari
私の例では、 "building"は "collection"の名前に過ぎず、23はカスタム "id"です。 locale = enおよびcategory = 15の複合IDを持つ場合、実際のIDは{en、15}なので、namespace:texts#{en、15}、またはより冗長になる:namespace:texts#{locale = en、カテゴリ= 15}。しかしこれはちょうどアイデアです、私はこれのように使ったことはありません。 ID要素の順序を変更しないように注意してください。なぜなら、キーはもちろん見つからないからです。実際には、そのような複雑さをキー名にエンコードするのではなく、代わりにredisデータ構造を使用することを検討してください。 https://redis.io/topics/indexes –
規約はので、私は個人的にセパレータにスラッシュ(/)を好む私は、ウェブ開発者だコロン(:) しかしのようです。スラッシュはすでにURL内で重要なセパレータであり、Uniform Resource Locatorsというようにリソースの種類のキーを意味します。コロン(:)で別のアプローチを取る理由は?それは何かを助けるか?
は、この例を考えてみましょう:
私たちは、おもちゃのオブジェクトのための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;
}
}
ユーザーがキーtoy/666
を持つオブジェクトを要求します。 Redisからそれをどうやって入手するのですか? Node.jsの関連例:
redis.get(key, function reply_callback(error, toystring) {
var toy = JSON.parse(toystring);
...
}
スラッシュをコロンに変換する必要はありません。逆も同様です。便利だと思いませんか?
を見てください...便利で、ほとんど*嫌なことに*安全ではありません。あなたは 'curl http://example.com/api/user/1/password''d、または同様のものを手に入れようとしています。 – ELLIOTTCABLE
コロン、ハッシュ、およびスラッシュを使用して、さまざまなレベルの入れ子を指定できます(例: 'User#23:uploads:my/path/to/file.ext' – incarnate
ユーザの入力をキーとしてデータベースに入力しないでください。 – Lyle
これは規約ではありませんが、URI形式と似ていますので、どこにでも共通しています。 – Gustav
@GustavはURI形式のwikiページを見ていますが、実際の標準がどのようにURI形式のようなものであるのかわかりません。説明できますか? – CivFan
私は、そのwikiページで 'urn:example:animal:ferret:nose'について話しています。 – Gustav