java - mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?
ringa_lee
ringa_lee 2017-04-18 09:06:49
0
4
977

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

ringa_lee
ringa_lee

ringa_lee

全員に返信(4)
洪涛

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

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

いいねを押す +0
小葫芦

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

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

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

いいねを押す +0
洪涛

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

いいねを押す +0
黄舟

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

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

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート