1. Redis デプロイメント構造の最適化に関する提案
1.マスターは AOF または RDB 永続化を行わず、スレーブは AOF 永続化を行いますが、同時に RDB 永続化を行うことを推奨します
2。すべてのマスターはスレーブを増やします
3。マスターは、M-S-S 方式を使用して 2 つまでのスレーブをマウントできます。高可用性、つまりマスターとスレーブの切り替えを確保したい場合は、Keepalived メカニズムを使用できます。新浪微博と淘宝網のアーキテクチャのソリューション。
2. Redis 構成の最適化に関する提案
1.tcp-keepalive 60
コマンドの実行による接続の切断を防止するタイムアウトに達するまでに時間がかかりすぎます。また、接続エラーの検出を改善できます。
2.stop-writes-on-bgsave-error no
ディスクへのデータの書き込みを停止します。 bgsave スナップショット操作でエラーが発生したため、後続の書き込み操作は失敗します。後続の書き込み操作に影響を与えないようにするには、値を no.
3.rdbchecksum no
に変更する必要があります。 RDB データの正確性をチェックするとパフォーマンスが 10% 犠牲になるため、閉じることをお勧めします。
4.auto-aof-rotate-max-size 20gb
auto-aof-rotate-max-total 4 auto-aof-rewrite-percentage 0 (关闭rewrite模式)
AOF を変更する書き換えモードを回転モードに変更すると、AOF オンライン リアルタイム書き換え機能がオフライン操作に切り替わり、1 つの AOF ファイルが複数のコピーに分割され (ログの切断と同様)、Redis のパフォーマンスが向上し、メモリ使用率が向上します。
5.no-appendfsync-on-rewrite yes
新しく変更されたデータがディスクにフラッシュされるときの IO ブロックを回避します
注: 上記は不合理な Redis 構成に基づく最適化の提案です
3. システム カーネル構成の最適化に関する提案
1. AOF モードがオンになっています。IO ブロックを軽減するには、
/etc/sysctl.conf を編集し、次の構成を追加します:
vm.dirty_background_ratio = 5 vm.dirty_ratio = 10
2. フォークの失敗を避けるために、RDB モードを有効にします
/etc/sysctl.conf を編集し、vm を変更します。 overcommit_memory=1,
次に sysctl -p を実行して構成ファイルを有効にします
備考: 上記はテスト結果に基づくシステム カーネル最適化の提案です
フォローアップ計画:
上記はアーキテクチャ観点からの最適化案ですが、続いてビジネス観点からメモリの種類が合理的かコールドか、ホットデータの分割が合理的かなどを分析していきます。 ##備考:
ホット データとコールド データの分割に関しては、統計分析に次の Redis コマンドを使用できます。
OBJECT REFCOUNT このコマンドは主にデバッグ (デバッグ) に使用されます。
OBJECT ENCODING このコマンドは、指定されたキーに対応する値が使用する内部表現を返します (翻訳者注: として理解することもできます)。データ圧縮方式).
OBJECT IDLETIME このコマンドは、指定されたキーに対応する値が保存されてからのアイドル時間を秒単位で返します (読み取りまたは書き込み操作の要求なし)。この値は 10 秒のアイドル時間を返します。 . 第 2 レベルの時間、これは将来の実装で改善される可能性があります。
redis の詳細については、
redis 入門チュートリアル列に注目してください。
以上がRedisのパフォーマンス最適化手法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。