ユーザーがお互いに友達になる能力があり、ユーザーの友達を表示するウィジェットがあるとします。
ここでRedisを使用して、user.idを介して関係を保存しますか?
1,2
1,5
4,1
3,1
1.friends -> 2, 3, 4, 5
しかし、それなら私はそれらの友達の詳細を取得する必要があります。これはクエリを使用して行われると思いますか"id IN(2,3,4,5)"?
ユーザーがお互いに友達になる能力があり、ユーザーの友達を表示するウィジェットがあるとします。
ここでRedisを使用して、user.idを介して関係を保存しますか?
1,2
1,5
4,1
3,1
1.friends -> 2, 3, 4, 5
しかし、それなら私はそれらの友達の詳細を取得する必要があります。これはクエリを使用して行われると思いますか"id IN(2,3,4,5)"?
間違いなくredisを使用してこのデータを表すことができます。user:1 => {'name': 'foo', 'email': 'foo@foo.foo'}
1つの戦略は、ユーザーID(eg )と関係(eg user:1:friends => (2, 3, 4, 5)
)のユーザーIDのセットでキー設定された、ユーザーの詳細ごとにハッシュを使用することhgetall user:<ID>
です。そのユーザーの情報を取得します。HGETALLはO(N)です。ここで、Nはフィールドの数です。フィールドの数が少なく(比較的)固定されるユーザーオブジェクトのようなものの場合、HGETALLは事実上O(1)であるため、追加のルックアップはそれほど高価ではありません。また、redisパイプラインを使用して、これらのルックアップをバッチ処理し、ネットワーク費用を最小限に抑えることもできます。