検索

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

java - mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?

mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?

ringa_leeringa_lee2769日前984

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

  • PHP中文网

    PHP中文网2017-04-18 09:08:49

    @ybak の回答に基づいて、比較的シンプルで実用的な解決策を紹介します。

    Redis が占有するメモリを制限します。Redis は独自のデータ排除戦略に従ってホット データをメモリにロードします。
    そこで、20W データが占めるおおよそのメモリを計算し、Redis のメモリ制限を設定します。

    返事
    0
  • 高洛峰

    高洛峰2017-04-18 09:08:49

    問題はどのデータですか?

    ユーザーデータなど。データベースには 2,000 万件のエントリがあります。
    アクティブ ユーザー:
    2 日以内にログインしたユーザー (便宜上、1 日以内のアクティブ ユーザー) を redis sortSet に入れます。セットが既に存在する場合は、そのスコア (ログイン時間) が ZADD にログインします。上書きされます。キー: ログイン:ユーザー、値: スコアのタイムスタンプ、値のユーザー ID。定期的なタスクを設定します。たとえば、ソート セットのデータを前日の 03:00:00 より前に削除するなどです (セットが無秩序に増大しないようにし、過去 1 日のアクティブ ユーザーを維持するため) )。

    取得時に、現在のタイムスタンプ (int 10 桁) を取得し、スコア範囲に従って過去 24 時間のアクティブ ユーザーを取得するために 1 日を減算します。

    返事
    0
  • PHP中文网

    PHP中文网2017-04-18 09:08:49

    あなたの質問を見ると、Redis をキャッシュとして使用する必要があります。
    キャッシュの無効化を実装する簡単な方法を提供します: LRU (最近ではほとんど使用されなくなりました)
    つまり、Redis キャッシュがヒットするたびに、ヒット キャッシュへの特定の ttl (有効期限) (10 分など、特定の状況に応じて設定)
    一定の時間が経過すると、ホット データの ttl は大きくなり、自動的に期限切れになりません。コールド データは基本的に期限切れになります。設定された ttl はすぐに無効になります。

    返事
    0
  • 黄舟

    黄舟2017-04-18 09:08:49

    Redis メモリ データ セットのサイズが一定のサイズに増加すると、データ削除戦略が実装されます。

    redis は 6 つのデータ削除戦略を提供します:

    volatile-lru: 有効期限付きのデータセットから最も最近使用されていないデータを選択し、削除します
    volatile-ttl
    volatile-random
    allkeys-lru
    allkeys -random
    no-enviction

    返事
    0
  • キャンセル返事