web-dev-qa-db-ja.com

mysqlデータベースのキャッシュとしてredisを使用する

多くのデータを含むmysqlデータベースを使用して、phpを使用してソリューションを作成する必要があります。私のプログラムには多くの要求があります。キャッシュとOOデータベースで作業すると、良い結果が得られますが、経験はありません。

たとえば、mysqlに保存されている情報をredisデータベースにキャッシュすると、パフォーマンスが向上すると思いますが、これが良いアイデアかどうかはわかりません。

私の英語があまり上手でなければ申し訳ありませんが、私はブラジル出身です。

26

はい、redisはそのために役立ちます。しかし、要点を理解するために、キャッシュには基本的に2つのアプローチがあります。フレームワークを使用するかどうか(および使用するフレームワーク)に応じて、標準またはプラグインを使用した最初のオプションを使用できます。

  1. キャッシュデータベースクエリ、つまり-選択されたクエリとその結果は、指定された時間またはキャッシュをクリアするまで(データベースの更新後に役立つ)高速アクセスのためにredisに保持されます。この場合、組み込みのmysqlクエリキャッシングを使用できます。追加のキー値ストアを使用するよりも簡単です。または、キャッシュを使用して独自のクラスでデフォルトのデータベース統合をオーバーライドできます(たとえば http:/ /pythonhosted.org/johnny-cache/ )。
  2. カスタムキャッシュ。独自の構造を作成してキャッシュに保持し、データベースから取得したデータを定期的または手動で補充します。リストやソートセットなどの組み込みのRedis機能を使用して更新のオーバーヘッドを大幅に削減できるため、より柔軟で潜在的に強力です。少しコーディングが必要ですが、よりカスタマイズされているため、通常はより良い結果が得られます。良い例は、idのredisリストの形式でトップ記事を保持し、次にredisから与えられたidでシリアル化された記事にアクセスすることです。その記事を非正規化しておくことができます-すなわち。シリアル化されたオブジェクトには、ユーザー名だけでなくユーザーIDも含めることができるため、追加のクエリのオーバーヘッドを最小限に抑えることができます。

どのアプローチをとるかはあなた次第です。私は個人的にほとんど常にアプローチ2番を採用しています。しかし、もちろん、すべてはあなたがどれだけの時間を持っているか、そしてアプリケーションが何をすべきかによって異なります-mysqlクエリキャッシングから始めて、結果がredisとカスタムキャッシングへの移動が十分でない場合も同様です。

47