sql >> データベース >  >> NoSQL >> Redis

Redisを使用してSQL結果をキャッシュする

    PHPとMySQLに関しては、驚くべきことがあります(他の言語についてはよくわかりません)-そうではありません memcachedまたはRedisへのキャッシュは実際には高速です。はるかに高速。基本的に、アプリを作成してMySQLを照会した場合、それをさらに活用できます。

    さて、「なぜ」の部分です。

    InnoDB 、デフォルトのエンジンは素晴らしいエンジンです。具体的には、メモリ管理(割り当てなど)は、どのメモリストレージソリューションよりも優れています。それは事実です。調べたり、私の言葉を借りたりすることができます。少なくとも、Redisと同じくらいのパフォーマンスが得られます。

    これで、アプリで何が起こるか-MySQLにクエリを実行し、結果をredisにキャッシュします。ただし、MySQLは、キャッシュされた結果を保持するのに十分なほど賢いです。今行ったことは、Redisに接続するために必要な追加のファイル記述子を作成することです。また、MySQLがすでにキャッシュした結果をキャッシュするために、ストレージ(RAM)を使用しました。

    ここにもう1つの興味深い部分があります。PHPスクリプトを提供するための好ましい方法は、php-fpmを使用することです。 -どのmod_*よりもはるかに高速です そこにがらくた。コアに至るまで、php-fpm 子プロセスを生成するスーパーバイザープロセスです。スクリプトが提供された後はシャットダウンしません。つまり、MySQLへの接続をキャッシュします。1回接続し、複数回使用します。基本的に、php-fpmを使用してスクリプトを提供する場合 、MySQLへのすでに確立された接続を再利用します。つまり、リクエストごとに接続を開いたり閉じたりすることはありません。これは非常にリソースに優しいため、MySQLへの超高速接続が可能になります。 MySQLは、メモリ効率が高く、結果がキャッシュされるので、Redisよりもはるかに高速です。

    さて、これはあなたにとって何を意味しますか?適切なセットアップを行うことで、Redisを含まないシンプルで簡単な小さなコードを作成でき、キャッシュの無効化で発生する可能性のあるすべての問題を排除し、無駄にすることはありません同じデータを2回含むメモリ。

    これが機能するために必要な成分:

    • php-fpm
    • MySQL およびInnoDB ベースのテーブルと何よりも-十分なRAMと微調整されたinnodb_buffer_pool_size 変数。これは、InnoDBがその目的のために割り当てることができるRAMの量を制御します-大きいほど良いです。

    ゲームからRedisを排除し、コードをシンプルで保守しやすくし、データを複製せず、プレイに追加のシステムを導入せず、データを処理するためのソフトウェアにその役割を任せました。すべてのソフトウェアを最初からコンパイルしたとしても、最大限の有用性を得るにはかなり安価なトレードオフです。起動して実行するのに1時間ほどかかることはありません。

    または、私が書いたものを無視して、Redisを使用して解決策を探すこともできます。



    1. MongoDBで日付から月を取得する5つの方法

    2. 製品環境でallowDiskUseオプションを使用する必要がありますか?

    3. 一部のキーに対してのみLRUエビクションポリシーをRedisに選択させるにはどうすればよいですか?

    4. mongodbタイプを配列に変更