redisデータベースキャッシュの詳細
3917 ワード
redis需要背景キャッシュは必須ではなく、パフォーマンスの向上が必要であるため増加します. ターゲット:ディスク・データベースのクエリーを減らすためにmysqlのクエリーよりも、メモリからデータを読み取るmysqlのクエリー・データの方が1 s程度かかります.1 s以上は通常遅いクエリーと考えられていますが、ridesがサポートする操作性能は1 sで行うことができます(1 w~10 w)データ 使用シーン:1.使用前提は頻繁に読み取る2.データは常に変化しないので、基本的には必ずキャッシュ処理をする.データは頻繁に変化する可能性があります.データが製品のコアデータであれば、キャッシュの構築を考慮することができます.キャッシュ時間が短く、5分間キャッシュしても、データベースクエリー操作を大幅に削減することができ、パフォーマンスを向上させることができます.
キャッシュアーキテクチャ
マルチレベルキャッシュローカルキャッシュグローバル変数ormフレームワークquerysetクエリーセット保存、ローカル保存キャッシュの役割 を果たす.外部キャッシュはマルチレベルキャッシュredisを構築することができ、mencachedキャッシュデータの保存方式 を得る.シーケンス化文字列 redisはhash,set,zset のような他のデータ型を得る
キャッシュ有効期間
データをキャッシュするには、次の理由で有効期間を設定する必要があります.タイムリーにクリーンアップすることで、スペースを節約できます. はデータの整合性を保証し、mysql中のデータとreids中のデータを保証し、更行データの後も継続することができ、一定時間以内にredisとmysql中のデータは異なるが、有効期間が過ぎるとredisはデータを整理し、再びデータを照会する際に新しいキャッシュデータを形成し、redisとmysqlはまた同じである.
redisの有効期間ポリシー
共通の有効なポリシー:タイミング失効
タイマーをオンにし、有効期限が到着した後にデータを整理することは、各データに必要なタイマーと理解できます.欠点:パフォーマンスの消費不活性期限切れ保存データ有効期間が設定された後、このデータの有効期間を自発的に維持しない. 定期的に期限切れになったデータが期限切れになっていないことを定期的にチェックします.例えば、100 msごとに期限切れと判断し、期限切れがあればすぐに整理します.
redisの有効期間ポリシー:不活性期限切れ+定期期限切れredisが定期期限切れを実現する場合、すべてのデータをクエリーするのではなく、100 msごとにランダムにいくつかのデータを選択して期限切れを判断し、100 msを超えてランダムにいくつかの判断を選択します.
キャッシュの除外
背景:redisのデータ有効期間ポリシーは、データが本当にクリーンアップされても、スペースが浪費される可能性があることを保証することはできません.また、新しいデータが保存される場所がありません.新しいデータを保存するためには、redisの新しいデータをクリーンアップし、新しいデータを保存するスペースを空ける必要があります.
汎用メモリ淘汰アルゴリズム:LRU&LFU LRU(least recently used、最近最小使用)思想:最近使用したデータほど、次に使用する機会が大きいほど、昔使用したデータ を整理すべきだと考えている. LFU(least frequently used)の最小使用思想:使用回数の多いデータは、次に使用する機会が大きいほど、使用回数の少ないデータ を整理すべきであると考えている.
Redisのメモリ淘汰ポリシー(3.x以降) noeviction:メモリがデータを書き込むのに不足している場合、新しい書き込み操作はエラーを報告し、デフォルトはnoevitionです. allkeys-lru:メモリが不足している場合に新しいデータを書き込む場合、キースペースで最近最も少ないkeyを削除します. allkeys-random:メモリが新しいデータに書き込まれない場合、キースペースでキーをランダムに削除します. volatile-lru:メモリが新しいデータに書き込まれていない場合、有効期限が設定されているキースペースで、最近最も少ないkeyを削除します. vlatile-random:メモリが不足して新しいデータを書き込む場合、有効期限が設定されているキースペースでキーをランダムに削除します. volatile-ttl:メモリが不足して新しいデータを書き込む場合、有効期限が設定されたキースペースでは、より早い時間のkeyが優先的に削除されます.redisの構成
キャッシュ・モード
アプリケーションがキャッシュを使用する方法キャッシュシーンを読む:頻繁にデータベースをクエリーするシーン方式:アプリケーションとmysqlデータベースの間でredisをキャッシュと仮定し、データを保存するときにキャッシュredisに保存し、直接redisに保存せず、その後redisからmysqlにデータを同期する. キャッシュシーンを書く:頻繁にデータを保存する必要があるシーン方式:アプリケーションとmysqlデータベースの間にredisをキャッシュとして架設し、データを保存する時にredisに保存し、mysqlに直接保存しないで、その後reidsからデータを同期してmysqlまで中読キャッシュの大きいデータ同期問題:mysqlから得たデータを修正し、Redisでキャッシュされたデータの処理方法 まずデータベースを更新し、更新キャッシュ でまずキャッシュを削除し、更新データベース でまずデータベースを更新し、削除キャッシュで問題が発生する確率が小さく、負の影響が最小 である.
キャッシュの使用中に問題が発生する可能性がありますキャッシュスルー問題:クエリーに存在しないデータの場合、キャッシュは空で、データも空で、アクセスするたびにデータベースに落下し、データベースの性能が悪くなる解決:キャッシュに存在しないデータを保存するより、-1で保存し、データが存在しないことを示し、このような攻撃をブロックすることができ、データベースクエリー を減らすキャッシュ雪崩問題:データをキャッシュする時、同じ時効を設定して、ちょうど同時アクセスして、データはすべて失効して、クエリーキャッシュが空になって、直接データベースにアクセスして、データベースは担ぐことができなくて、崩壊して解決します:1.データの有効期間に偏差値を増やし、同じデータを異なる期間で失効させる.2.マルチレベルキャッシュは、各レベルのキャッシュの時効が異なると仮定します.3.保護データベースから出発し、データベース操作にロック を追加する.
キャッシュアーキテクチャ
マルチレベルキャッシュ
setex('user:{user_id}:info')
setex (''user:1:info,expiry,json.dumps(user_dict))
# hash : ,
# : ,
hset('user:1:info',user_dict)
キャッシュ有効期間
データをキャッシュするには、次の理由で有効期間を設定する必要があります.
redisの有効期間ポリシー
共通の有効なポリシー:
set a 100 10min
set b 100 20min
タイマーをオンにし、有効期限が到着した後にデータを整理することは、各データに必要なタイマーと理解できます.欠点:パフォーマンスの消費
redisの有効期間ポリシー:不活性期限切れ+定期期限切れredisが定期期限切れを実現する場合、すべてのデータをクエリーするのではなく、100 msごとにランダムにいくつかのデータを選択して期限切れを判断し、100 msを超えてランダムにいくつかの判断を選択します.
キャッシュの除外
背景:redisのデータ有効期間ポリシーは、データが本当にクリーンアップされても、スペースが浪費される可能性があることを保証することはできません.また、新しいデータが保存される場所がありません.新しいデータを保存するためには、redisの新しいデータをクリーンアップし、新しいデータを保存するスペースを空ける必要があります.
汎用メモリ淘汰アルゴリズム:LRU&LFU
cache_data = [
cache1
cache2
cache3
cache4 #
]
cache3
cache_data = [
cache3
cache1
cache2
cache4
]
cache4
cache_data = [
cache4
cache3
cache1
cache2
]
cache_data = [
cache1 :200
cache2:5
cache3:150
cache4:1 #
]
Redisのメモリ淘汰ポリシー(3.x以降)
maxmemorry redis
maxmemorry-policy volati-lru
キャッシュ・モード
アプリケーションがキャッシュを使用する方法
キャッシュの使用中に問題が発生する可能性があります