web-dev-qa-db-ja.com

Redisキー内のコロンの目的は何ですか

私のプロジェクトでRedisを使用する方法を学んでいます。頭に浮かばないことの1つは、キーの名前にコロンが正確に使用されていることです。

私はこれらのようなキーの名前を見ました:

users:bob
color:blue
item:bag

コロンはキーをカテゴリに分けて、キーをより速く見つけるのですか?もしそうなら、キーに名前を付けるときに複数のコロンを使用して、それらをサブカテゴリに分類できますか?最後に、Redisサーバー内のさまざまなデータベースの定義と関係がありますか?

私はドキュメントを読み、この件について多数のGoogle検索を実行しましたが、奇妙なことに、これについて議論していることは何も見つかりません。

70
Ryan

コロンは、名前空間付きデータを格納するための概念として、以前のredisバージョンにありました。初期のバージョンでは、redisは文字列のみをサポートしていました。メールと「bob」の年齢を保存したい場合は、すべて文字列として保存する必要があったため、コロンを使用していました。

SET user:bob:email [email protected]
SET user:bob:age 31

それらにはno redisの特別な処理またはパフォーマンス特性があり、唯一の目的は、データを名前空間に配置して再度検出することでした。最近では、ハッシュを使用して、コロン付きのキーのほとんどを格納できます。

 HSET user:bob email [email protected]
 HSET user:bob age 31

ハッシュに「user:bob」という名前を付ける必要はありませんが、「bob」という名前を付けることができますが、ユーザープレフィックスを使用して名前空間を付けることで、このハッシュが持つべき、または持つことができる情報がすぐにわかります。

86
Tobias P.

コロンは、キーを構造化する方法です。それらは決してredisによって解釈されません。他の区切り文字を使用することも、まったく使用しないこともできます。個人的には/を使用すると、キーがファイルシステムのパスのように見えます。それらはパフォーマンスに影響を与えませんが、redisはすべてのキーをメモリに保持する必要があるため、過度に長くしないでください。

SQLの結合に対するredisの回答であるsortコマンドの機能を活用するには、適切なキー構造が重要です。

GET user:bob:color   -> 'blue'
GET user:alice:color -> 'red'

SMEMBERS user:peter:friends -> alice, bob

SORT user:peter:friends BY NOSORT GET user:*:color   -> 'blue', 'red'

キー構造により、SORTは構造化キーを参照してユーザーの色を検索できることがわかります。

38
Fabian Jakobs