[転送] redis のパフォーマンス比較; memcache_PHP チュートリアル;
まず私自身の使用法について話させてください:
最初の memcache が使用されます。これは、キーと値の関係のためのサーバー側のキャッシュで、それほど大きくないが、迅速な応答が必要な、一般的に使用されるデータを保存するために使用されます。
redis、memcache、mongoDB 、投票へようこそを比較しました
1、パフォーマンス
それらはすべて比較的高いので、パフォーマンスがボトルネックになることはありません一般に、
TPSの観点から見ると、redisはmemcacheとほぼ同じですが、mongodbよりも大きくなります
2、操作の便利さ
memcache単一のデータ構造 データ操作の点では、
Redis の一部がより豊富で、 Redis の方が優れており、ネットワークの数は io 倍 mongodb
豊富なデータ表現、インデックス作成をサポートし、リレーショナル データベースに最も似ており、幅広いクエリ言語をサポートします 3
、メモリ空間のサイズとデータのサイズ redis
は、 2.0 バージョンの後に独自の VM 機能を追加し、物理メモリの制限を突破しました。 value有効期限を設定します (memcacheと同様) memcacheは利用可能な最大メモリを変更できます
、はLRUアルゴリズムを採用しています MongoDB は、メモリ管理をオペレーティング システム
VM に依存しており、他のサービス と組み合わせるべきではありません。 4、在庫状況 (単一ポイントの問題)
単一点の質問については、
Redis赖、メインとスレーブのコピー時にクライアントに依存し、ノードから接続されるたびにメインノードはスナップショット全体に依存します。
そのため、単一点の問題はより複雑です。自動シャーディングはサポートされておらず、一貫したプログラム設定 ハッシュ メカニズムに依存する必要があります。
別の方法は、redis 独自のレプリケーション メカニズムを使用し、アクティブ レプリケーション (複数のストレージ) を自分で使用するか、増分レプリケーション (一貫性の問題とパフォーマンスのトレードオフを自分で実装する必要があります) に変更することです。 H Memcachee にはデータ冗長メカニズムがありません。また、障害防止のために、単一点障害によって引き起こされるジッターの問題を解決するために、成熟したハッシュ アルゴリズムを採用しています。
mongoDB は、マスター/スレーブ、replicaset
(内部でpaxos選択アルゴリズムを使用、自動障害回復) 、autoをサポートします シャーディングメカニズムは、フェイルオーバーおよびシャーディングメカニズムからクライアントを保護します。
5、信頼性(永続性) データの永続化とデータの回復については、 redis サポート (スナップショット、
AOF): 永続性のためにスナップショットに依存し、aof は信頼性を強化し、パフォーマンスに影響を与えます
memcache
はサポートされていません。通常、パフォーマンスを向上させるための、 のキャッシュに使用されます。
MongoDB は、1.8バージョンから永続性の信頼性をサポートするためにbinlog
6、データの一貫性 (トランザクションのサポート)
Memcache 同時シナリオでは、一貫性を確保するために cas を使用します
Redis トランザクションのサポートは比較的弱いため、トランザクション内の各操作が継続的に実行されることのみを保証できます
mongoDB はトランザクションをサポートしていません
7、データ分析
mongoDBにはデータ分析機能(mapreduce)が組み込まれていますが、その他はサポートされていません
8、アプリケーションシナリオ
Redis量: より高いパフォーマンスの操作とデータ量の操作
Memcache: データベース の負荷を軽減し、動的システム でパフォーマンスを向上させるために使用されます。 キャッシュとパフォーマンスの向上 (読み取りを増やし書き込みを減らすのに適しており、大量のデータには シャーディング を使用できます)中古)
MongoDB:主に大量データのアクセス効率の問題を解決します
$mem->connect("127.0.0.1", 11211);
$time_start = microtime_float();
//データを保存します
for($i = 0; $i <100000; $i ++){
$mem->set("key$i",$i,0,3);
}
$time_end = microtime_float();
$run_time = $time_end - $time_start;
echo "$run_time 秒 n";
関数 microtime_float()
{
List($usec, $sec) =explode(" ", microtime());
Return ((float)$usec + (float)$sec);
}
?>
redisのテストコードは以下の通り: redis1.php このコードには10秒ほどかかります
//接続
$redis = 新しい Redis();
$redis->connect('127.0.0.1', 6379);
$time_start = microtime_float();
//データを保存します
for($i = 0; $i <100000; $i ++){
$redis->sadd("key$i",$i);
}
$time_end = microtime_float();
$run_time = $time_end - $time_start;
echo "$run_time 秒 n";
//接続を閉じます
$redis->close();
関数 microtime_float()
{
List($usec, $sec) =explode(" ", microtime());
Return ((float)$usec + (float)$sec);
}
?>
キー値の設定中に有効期限を設定する必要がある場合、実行には約 20 秒かかります。テストコードは次のとおりです: redis2.php
//接続
$redis = 新しい Redis();
$redis->connect('127.0.0.1', 6379);
$time_start = microtime_float();
//データを保存します
for($i = 0; $i <100000; $i ++){
$redis->sadd("key$i",$i);
$redis->expire("key$i",3);
}
$time_end = microtime_float();
$run_time = $time_end - $time_start;
echo "かかった時間 $run_time 秒 n";
//接続を閉じます
$redis->close();
関数 microtime_float()
{
List($usec, $sec) =explode(" ", microtime());
Return ((float)$usec + (float)$sec);
}
?>
その後、インターネットで、redis にはトランザクションと呼ばれる魔法の機能があることを発見しました。これは、マルチを通じてコードのブロックを原子的に順番に実行し、それによって完全な機能モジュールの実行を実現します。残念ながら、テストによると マルチモードでコードを実行すると、リクエストの数は減らないのに、マルチ命令と exec 命令を実行するとリクエストが送信されるため、実行時間が 4 倍になることがわかりました。 4 つの命令の実行時間。テストコードは次のとおりです: redis3.php
//接続
$redis = 新しい Redis();
$redis->connect('127.0.0.1', 6379);
$time_start = microtime_float();
//データを保存します
for($i = 0; $i <100000; $i ++){
$redis->multi();
$redis->sadd("key$i",$i);
$redis->expire("key$i",3);
$redis->exec();
}
$time_end = microtime_float();
$run_time = $time_end - $time_start;
echo "かかった時間 $run_time 秒 n";
//接続を閉じます
$redis->close();
関数 microtime_float()
{
List($usec, $sec) =explode(" ", microtime());
Return ((float)$usec + (float)$sec);
}
?>
この問題にはボトルネックがあり、大量のデータ処理を必要とする企業は多くありますが、1 秒あたり 5,000 回では需要を満たすには程遠いです。また、redis マスター/スレーブ サーバーには memcache よりも大きな利点があるためです。 将来のデータのために、redis を使用する必要があります。現時点では、phpredis が提供する pipline 関数という新しい方法が登場しました。これは、複数のコードを実際にカプセル化することができます。 1 回のリクエストで実行速度が大幅に向上し、500,000 回のデータを実行するのにかかる時間はわずか 58 秒です。テストコードは次のとおりです: redis4.php
//接続
$redis = 新しい Redis();
$redis->connect('127.0.0.1', 6379);
$time_start = microtime_float();
//データを保存します
for($i = 0; $i <100000; $i ++){
$pipe=$redis->パイプライン();
$pipe->sadd("key$i",$i);
$pipe->expire("key$i",3);
$replies=$pipe->execute();
}
$time_end = microtime_float();
$run_time = $time_end - $time_start;
echo "かかった時間 $run_time 秒 n";
//接続を閉じます
$redis->close();
関数 microtime_float()
{
List($usec, $sec) =explode(" ", microtime());
Return ((float)$usec + (float)$sec);
}
?>
この操作を使用すると、代入操作と有効期限設定操作を 1 つのリクエストに完全にパッケージ化して実行できるため、作業効率が大幅に向上します。
Redis のインストール: http://mwt198668.blog.163.com/blog/static/48803692201132141755962/
memcache のインストール: http://blog.csdn.net/barrydiu/article/details/3936270
Redis設定のマスター/スレーブサーバー: http://www.jzxue.com/fuwuqi/fuwuqijiqunyuanquan/201104/15-7117.html
Memcache はマスター/スレーブ サーバーを設定します: http://www.cnblogs.com/yuanermen/archive/2011/05/19/2051153.html
この記事の引用元: http://blog.csdn.net/a923544197/article/details/7594814

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











eコマースのWebサイトを開発するとき、私は困難な問題に遭遇しました。ユーザーにパーソナライズされた製品の推奨事項を提供する方法です。当初、私はいくつかの簡単な推奨アルゴリズムを試しましたが、結果は理想的ではなく、ユーザーの満足度も影響を受けました。推奨システムの精度と効率を改善するために、より専門的なソリューションを採用することにしました。最後に、Andres-Montanez/Adcumentations Bundleを介してAndres-Montanez/Bundleをインストールしました。これは、問題を解決しただけでなく、推奨システムのパフォーマンスを大幅に改善しました。次の住所から作曲家を学ぶことができます。

CENTOSシステムのRedisスロークエリログを有効にして、パフォーマンスの診断効率を改善します。次の手順では、構成をガイドします。ステップ1:最初にRedis構成ファイルを見つけて編集し、通常は/etc/redis/redis.confにあるRedis構成ファイルを見つけます。次のコマンドで構成ファイルを開きます:sudovi/etc/redis/redis.confステップ2:構成ファイルでスロークエリログパラメーターを調整し、次のパラメーターを見つけて変更します:#slow query-log-log-slower-slower-than10000#スロークエリのエントリの最大数

Redisキャッシュソリューションは、製品ランキングリストの要件をどのように実現しますか?開発プロセス中に、多くの場合、ランキングの要件に対処する必要があります。

Laravel 8は、パフォーマンスの最適化のための次のオプションを提供します。キャッシュ構成:Redisを使用してドライバー、キャッシュファサード、キャッシュビュー、ページスニペットをキャッシュします。データベースの最適化:インデックスを確立し、クエリスコープを使用し、雄弁な関係を使用します。 JavaScriptおよびCSS最適化:バージョン制御を使用し、アセットをマージおよび縮小し、CDNを使用します。コードの最適化:Composer Installation Packageを使用し、Laravelヘルパー機能を使用し、PSR標準に従ってください。監視と分析:Laravel Scoutを使用し、望遠鏡を使用し、アプリケーションメトリックを監視します。

スプリングブートでは、Redisを使用してOAuth2Authorizationオブジェクトをキャッシュします。 Springbootアプリケーションでは、Springsecurityouth2authorizationserverを使用してください...

Redisは、データストレージと管理において重要な役割を果たしており、複数のデータ構造と持続性メカニズムを通じて最新のアプリケーションの中核となっています。 1)Redisは、文字列、リスト、コレクション、注文されたコレクション、ハッシュテーブルなどのデータ構造をサポートし、キャッシュや複雑なビジネスロジックに適しています。 2)RDBとAOFの2つの持続方法を通じて、Redisは信頼できるストレージとデータの迅速な回復を保証します。

MongoDBは、構造化されていないデータと高いスケーラビリティ要件に適していますが、Oracleは厳格なデータの一貫性を必要とするシナリオに適しています。 1.MongoDBは、ソーシャルメディアやモノのインターネットに適したさまざまな構造にデータを柔軟に保存します。 2。Oracle構造化データモデルは、データの整合性を保証し、金融取引に適しています。 3.mongodbは、破片を介して水平方向に尺度を拡大し、OracleはRACを垂直にスケールします。 4.MongoDBにはメンテナンスコストが低く、Oracleにはメンテナンスコストが高くなりますが、完全にサポートされています。

公式Redisソースからソースコードパッケージをダウンロードして、コンパイルしてインストールして、最新の安定したバージョンを確保し、パーソナライズされた方法でカスタマイズできます。特定の手順は次のとおりです。ソフトウェアパッケージリストを更新してRedisディレクトリを作成するRedisソースコードパッケージをダウンロードしてソースコードパッケージを解凍し、インストール構成をコンパイルし、Redis構成を変更してRedisの起動ステータスを確認します
