Memcacheキャッシュmysqlデータベース操作の原理とキャッシュプロセスの概要

3189 ワード

1.まず、キャッシュする必要があるかどうかを明確にし、現在のアーキテクチャのボトルネックがどこにあるかを明らかにし、ボトルネックが本当にデータベース操作である場合は、引き続き下を見ます.
2.memcachedとredisの違い、どちらを使うかを明確にする.前者はあくまでキャッシュであり、永続的にデータを保存することは不可能(LRUメカニズム)、分散をサポートし、後者はキャッシュのほかにデータをディスクに永続化することもサポートし、redisは自分で分散キャッシュ(最新バージョンの統合されたようだ)を実現し、自分で一致性hashを実現しなければならない.あなたたちのアプリケーションシーンが分からないので、memcacheを使うかredisを使うかは言いにくいですが、mongodbを使うほうがいいかもしれません.例えば、ストレージログの面です.
3.コメントなど、キャッシュ量が大きいが変化しないデータ.
4.あなたの考えは正しいです.はっきりしています.DBを読む前に、キャッシュを読んで、直接戻ってきたら、DBを読んでいなければ、キャッシュ層に書き込んで返します.
5.主従が必要かどうか、読み書き分離が必要かどうか、分散配置が必要かどうか、後続の水平伸縮が必要かどうかを考慮する.
6.一労永逸で、後続のメンテナンスと拡張が便利であるために、既存のコードアーキテクチャを最適化し、データベースコンポーネントの置き換えに大量のコードを変更する必要があります.現在のアーキテクチャに問題があることを示します.SpringMVCなどの既存のフレームワークを利用して、アプリケーション層とビジネス層とデータベース層をデカップリングすることができます.キャッシュする前にこれらを作成します.
7.リードキャッシュ等の操作をサービスコンポーネントとし、業務層にサービスを提供し、業務層はアプリケーション層にサービスを提供する.
8.元のデータベース・コンポーネントを保持し、サービス・コンポーネントに最適化し、後続のビジネス・レイヤがキャッシュまたはデータベースを柔軟に呼び出すのを容易にします.
9.一括全量キャッシュは推奨されず、最初はコア業務を動かさず、エッジ業務をまずキャッシュコンポーネントに変え、一歩一歩コア業務に変えることができる.
10.
メモリをリフレッシュし、memcachedを例に、新規、修正、削除操作は、lazy loadのポリシーが一般的に採用されています.すなわち、新規時にデータベースに書き込むだけで、すぐにMemcachedを更新するのではなく、再読み込み時にMemcachedにロードされ、修正と削除操作もより新しいデータベースであり、Memcachedのデータを失効とマークします.次回の読み込み時に再ロードします.
フェイスブック、ebayなどの大手サイトでは、Memcacheが中間キャッシュ層として機能していなければ、データアクセスは不可能です.一般サイトでは、独立したサーバさえあれば、Memcacheを構成することでアクセス速度を向上させ、データベースの圧力を減らすことができます.ここでは、MemcacheとMySQLデータベースのインタラクションプロセスの流れについて主に議論します.Memcacheの中間キャッシュ層の役割を理解し,Memcacheメカニズムの原理を深く理解する.
MemcacheとMySQLのインタラクティブなフローチャート
上記の図のように、従来のクエリー方法はデータベースを直接クエリーすることであり、データベースは結果をクエリー文に返し、Memcache中間キャッシュ層がある場合、クエリーはMemcacheキャッシュデータであり、以下はMemcacheの各種データ操作原理を詳しく理解する.
1.クエリー・データ(select)は、まず指定したKeyクエリー(get)Memcache中間キャッシュ・レイヤ・データにより、対応するデータが存在する場合、直接データ結果を取得し、クエリー・プロシージャはデータベースをクエリーする必要はありません.存在しない場合は、MySQLデータベースをクエリーし、key対応valueでクエリー結果をMemcacheキャッシュデータに格納し、クエリー文に返します.2.データ(update)を更新し、まずデータを更新し、その後、関連するmemcacheデータ(delete)を削除します.3.データ(add)を追加し、まず関連キャッシュデータを削除し、次にデータを追加する.4.データ(delete)を削除し、データを削除し、Memcacheデータを削除する.
MySQLのデータ操作について、主に関連するMemcacheの方法は以下の通りである.
1.取得:get(key)2.設定:set(key,value[,expiry])3.削除:delete(key[,time])
例:投稿IDが2009の値を取得する投稿を想定し、MemcacheとMySQLのインタラクションは次のようになります.
 
   
$key = ‘biuuu_thread_';//key
$cachetime = 100;// ( )
$id = 2009;

Memcache基本操作手順
1.クエリー:$result=get($key.$id);$resultが空の場合はMySQLデータベースをクエリーし、set($key.$id,$value,0,$cachetime)2.更新:delete($key.$id);3.増加:delete($key.$id);4.削除:delete($key.$id);
直観図と実例を通してMemcacheとMySQLのインタラクションの基礎を持つべきであるが、実際にはアプリケーションにとっては基本的に十分であるが、ネーミングスペースなどの比較的複雑な状況に触れると、Memcacheの操作方式は異なるが、どのような操作でも基礎操作コマンドから離れられない.これはMemcache基礎編であるため、主にMemcacheとmysqlのインタラクティブな操作の流れを議論し、Memcacheの原理が明らかになった後、Memcacheの基本的な操作はこのように簡単です.
前提:変更されたデータが少ない場合、キャッシュ読み込みプロセスに適しています.
1、先にキャッシュにデータを調べる
2、キャッシュに存在しない場合は実際のデータソースから取り出し、取り出してキャッシュに入れる
3、次に同じ情報を取りに来た場合、そのままキャッシュから取得できる
キャッシュ更新プロセス:
1、データベースの更新
2、キャッシュを期限切れまたは無効にすると、次回のクエリーでキャッシュで調べられずにデータベースからやり直すことができます.
汎用キャッシュメカニズム:
1、クエリーのメソッド名+パラメータをクエリー時のkey value対のkey値とする
2、memcacheやredisなどのnosqlデータベース(またはメモリhashmap)にデータを挿入する
3、データを取る時も方法名+パラメータをkeyとしてキャッシュデータソースに情報を取得する