PHP における redis と memcache の違い
PHP における Memcached と redis は非常に似ており、どちらも同じです。インメモリ データベース : データはメモリに保存され、tcp を通じて直接アクセスされます。利点は高速で同時実行性が高いことです。欠点は、データ型が限定され、クエリ機能が弱いことです。一般にキャッシュとして使用されます。
推奨事項: "Redis ビデオ チュートリアル " "memcached ビデオ チュートリアル "
質問者は、redis は memcached のすべてのことを実行できると言いました。 ? 他に memcached を使用している人はいますか?なぜなら、この 2 つは完全に互換性があるわけではなく、それぞれ独自の長所と短所もあります:
Memcached
Memcached の利点:
Memcached はマルチコアを活用でき、単一インスタンスのスループットは非常に高く、数十万 QPS に達する可能性があります (キーと値のバイト サイズとサーバー ハードウェアのパフォーマンスによって異なります)。日常環境におけるピークQPSは約4~約6wです。
最大負荷容量に適しており、サーバーを効果的に解凍します。
セッション ハンドルとして直接構成をサポートします。
設定とメンテナンスにおける落とし穴は比較的少ないです。
Memcached の制限:
データ構造は非常に単純かつ単一であり、豊富なデータ型をサポートできる Redis とは異なり、単純なキー/値データ構造のみをサポートします。
永続化は不可能で、データはバックアップできず、キャッシュのみに使用でき、再起動するとすべてのデータが失われます。
データ同期を実行できず、MC 内のデータを他の MC インスタンスに移行できません。
Memcached メモリ割り当てでは、Slab
割り当てメカニズムを使用してメモリを管理します。値のサイズ分布に大きな違いがあると、メモリ使用率が低下し、使用率が低い場合でもキックアウトなどの問題が発生します。ユーザーは価値設計に注意を払う必要があります。
memcached サーバーは、水平拡張をネイティブにサポートしていません。分散キャッシュを実装するには、クライアント上でキャッシュ分散戦略を記述する必要があります。データ同期を実行できないため、本番環境で 1 台のマシンに障害が発生すると、一部のビジネスに影響を及ぼす可能性があります。オペレーション。 。
Redis
Redis の利点:
文字列 (文字列)、
などの複数のデータ構造をサポートします。list (ダブルリンクリスト)、dict (ハッシュテーブル)、set (セット)、zset (ソートセット)、hyperloglog (カーディナリティ推定) など。
永続化操作をサポートし、AOF および RDB データをディスクに永続化して、データ損失を防ぐためのより良い方法であるデータ バックアップまたはデータ リカバリ操作を実行できます。
レプリケーションによるデータ レプリケーションをサポートします。マスター スレーブ メカニズムにより、データをリアルタイムで同期的にレプリケートでき、マルチレベル レプリケーションと増分レプリケーションがサポートされます。マスター スレーブ メカニズムは、Redis にとって重要な手段です。 HAを実行します。
シングルスレッドのリクエストでは、すべてのコマンドがシリアルに実行され、同時実行状況でのデータの整合性の問題を考慮する必要がありません。
メッセージのサブスクリプションと通知に使用できるパブリッシュ/サブスクライブ メッセージ サブスクリプション メカニズムをサポートします。
単純なトランザクション要件をサポートしていますが、業界では使用シナリオがほとんどなく、まだ成熟していません。
Redis の制限:
Redis は 1 つのスレッドのみを使用でき、そのパフォーマンスは CPU のパフォーマンスによって制限されるため、CPU の 1 つのインスタンスが到達できるのは 1 つのスレッドのみです。 1 秒あたり最大 5 ~ 6wQPS (データ構造、データ サイズ、サーバー ハードウェアのパフォーマンスによって異なりますが、毎日の環境における QPS のピークは約 1 ~ 2w)。
単純なトランザクション要件をサポートしますが、業界での使用シナリオが少なく、成熟していないため、長所と短所の両方があります。
Redis は文字列型でより多くのメモリを消費します。dict (ハッシュ テーブル) を使用してストレージを圧縮し、メモリ消費を削減できます。
概要
私の意見では、Redis は多くの点でデータベースの特徴を備えている、またはデータベース システムであるのに対し、Memcached は単なる K/V にすぎません。キャッシュ。
そして、redis を使用するか memcached を使用するかは、対象者のニーズによって決まります。キャッシングだけであれば、memcached でほとんどのニーズを満たすのに十分だからです。redis の出現は、より良い選択肢を提供するだけです。 Redis が memcached を完全に置き換えることができるという意味ではありません。これもニーズによって異なります。
技術的には、memcached よりも redis の方が新しいですが、成熟すると、memcached の方が優れているはずです。また、現在、トレンドは mongodb に移り始めています。redis のデータベース特性により、 mongodbの方が良いです。
多くの企業は依然としてキャッシュ戦略で memcached を使用しており、次に redis、そして最後に mongodb を使用しています。私はそのようなものは存在しないことがわかりました。会社のチームが最新のテクノロジーを適用するにはまだ時間がかかります。古いテクノロジーは成熟しており、より安定しているため、この戦略は今でも多くの企業チームで使用されており、これが redis よりも memcached が言及される理由です。
以上がPHPにおけるredisとmemcacheの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。