検索

ホームページ  >  に質問  >  本文

redis存储微博点赞的人,如何存储?

比如说有一个微博的TID是1。 UID为1,2,3,4,5,6,7,8,9的用户都给这个微博点赞了。用redis缓存框架存储的话如何存储。微博可能有几十万个。如果用

key->set(value) 这种形式的话 key是微博ID的标示 value是 [1,2,3,4,5,6,7,8,9]这种形式,这样的话有多少个微博就有多少个K-V存储。我想知道这样会有什么弊端吗?或者有什么更好的方法吗?

怪我咯怪我咯2799日前1122

全員に返信(3)返信します

  • 怪我咯

    怪我咯2017-04-22 09:01:23

    複数の HashSet ストレージを使用できます。各 Weibo は HashSet のサブキーにすぎません。 HIncrBy コマンドを使用すると、「いいね!」の数を増やすことができます。各 HashSet のキーが 100 を超えないように、TID をブロックに分割します。公式ドキュメントには、HashSet は内部要素が 100 未満の場合に線形ストレージとスキャンを使用するため、同じデータ スケールのツリー構造と比較して効率的でメモリの節約になると記載されています。

    例: TID 123456的微博存在z:1234 の HashSet では、そのキーは 56 です。最新の Weibo も非常にアクティブであると仮定すると、ほとんどの場合、少数の HashSet しか呼び出されず、これは CPU キャッシュに非常に優しいです。

    気に入ったユーザーを管理したい場合は、データ形式をカスタマイズできます。ユーザーの数が少ない場合は、ユーザー リスト全体を HashSet の値フィールドに埋め込みます。たとえば、ユーザーが 50 人を超えた場合は、ユーザーを Set に分割し、Set のキーを HashSet に保存します。例:

    リーリー

    ほとんどの Weibo ユーザーは「いいね」の数が少ないため、HashSet は多くのグローバル スペース キーを節約できます (グローバル キーは HashSet キーより多くのメモリを消費します)。

    @ 下着を販売してオンラインにアクセスするについての答え:
    インプレースクイックソートが使用されている場合、50 ユーザーの手動ソート効率は非常に高くなります。これは、このデータ規模では、データのコンパクトなストレージによってもたらされるキャッシュの使いやすさが、手動ソートと比較して Redis ZSet によってもたらされる改善よりもはるかに優れているためです。気に入ったユーザーが昇格すると、アルゴリズムの時間計算量を確保するために set または zset に自動的に適応します。それでも効率が心配な場合は、ソートされた UID リストを HashSet 内の値に書き戻し、将来データに変更がない場合はそれを直接使用できます。

    set と zset のどちらを使用するかは、投稿者のニーズによって異なります。 set へのメンバーの追加の複雑さは O(1)、zset への追加の複雑さは O(log N) ですが、set には並べ替え機能がありません。

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-22 09:01:23

    LS がデータのようなものを保存するために HASH を使用することはお勧めできません。 (必要な場合は必要だと思います) 並べ替える方法がないためです。

    現時点ではこのように対応しております。

    理論的に言えば、ZSET では 100,000 以内の数字は存在しません。つまり、Weibo のいいねをする人の数は 100,000 以内です (これは不可能です)。 リーリー

    それでは、また投稿してください!!!

    NOSQL などのデータベースを使用して Weibo などのデータを保存する必要がある場合は、次のように保存できます:)。

    リーリー

    追記、Weibo のコメントも同様の方法で保存されます。たとえば、$redis KEYS の名前に同意するだけです。 c:<コメントID> Weiboデータと関連付けるには次のようにします:

    t:$tid:comments:scores (ZSET タイムマップ コメント ID);

    データを取得するときは PIPELINE を使用するとはるかに便利です。

    最後に、NOSQLなどのデータベースのKEYを設定する必要があります。

    返事
    0
  • 怪我咯

    怪我咯2017-04-22 09:01:23

    1. 各 uid を保存する必要がありますか、それともこれが新浪微博のやり方だと思いますか?ほとんどの場合、誰もが数値のみに注目します。この場合は、数値を使用して {tid->count} を保存します

    2. 保存する必要がある場合は、{tid->set(uid)} を使用して保存することをお勧めします

    3. 最適化とは、しきい値を設定できることです。たとえば、100 人以上が気に入った場合は、何も追加せず、数値のみを追加します (もちろん、別の {tid-> を保存する必要があります)。カウント}) 。 Weibo には 10,000 件以上の「いいね!」があるため、「いいね!」をした人全員を 1 つずつクリックする人はいません。 。

    返事
    0
  • キャンセル返事