多级キャッシュをスキップ
キー値設計#
優雅なキー構造#
Redis のキーはカスタマイズ可能ですが、以下のいくつかのベストプラクティスに従うことをお勧めします:
- 基本フォーマットに従う:[ビジネス名]:[データ名]:[id]
- 長さは 44 バイトを超えない
- 特殊文字を含まない
例えば:私たちのログインビジネスでは、ユーザー情報を保存するため、そのキーは次のようになります: login:user:10
利点:
- 可読性が高い
- キーの衝突を避ける
- 管理が容易
- メモリを節約:キーは string 型で、底層のエンコーディングには int、embstr、raw の 3 種類があります。embstr は 44 バイト未満で使用され、連続メモリ空間を使用するため、メモリの占有が少なくなります。
set num 123
もし type num
で string
が得られますが、 object encoding num
では底層が int
になります。
set name Jack
もし type name
で string
が得られますが、 object encoding name
では底層が embstr
になります。
BigKey#
BigKey とは何か
- キー自体のデータ量が大きい
- メンバー数が多すぎる
- メンバーのデータ量が大きい
推奨値
- 単一のキーの値は 10KB 未満
- セットタイプのキーについては、要素数は 1000 未満を推奨
危害:
- ネットワークのブロッキング
- データの偏り、シャーディングの不均衡
- Redis のブロッキング
- シリアル化とデシリアル化による CPU の負荷が大きい
適切なデータ構造#
User オブジェクトのストレージについて
- String 型の文字列全体を user:1 として保存
- フィールドを分散させ、String 型でそれぞれ user:1、user:1として保存
- Hash 構造
Hash 構造は 1000 エントリを超えないようにし、分割可能です。
バッチ処理#
大データのインポート#
1 つのコマンド応答 = 1 回のネットワーク往復 + 1 回の実行
したがって、同等のデータ量を一度に送信する方が良いですが、あまり多くならないように注意してください。そうしないとネットワークがブロックされます。
パイプラインにコマンドを入れ、ネイティブのさまざまなコマンドをサポートします。これにより、これらすべてのコマンドを Redis に一度に送信します。ネイティブの MSET の原子性の大量操作ではありません。
永続化設定#
Redis の永続化はデータの安全性を保証できますが、多くの追加コストをもたらすため、永続化には以下の推奨事項に従ってください:
- キャッシュ用の Redis インスタンスでは、できるだけ永続化機能をオフにしてください。
- RDB 永続化機能をオフにし、AOF 永続化を使用することをお勧めします。
- スクリプトを利用して、スレーブノードで定期的に RDB を作成し、データバックアップを実現します。
- 適切な rewrite 閾値を設定し、頻繁な bgrewrite を避けます。
- no-appendfsync-on-rewrite = yes を設定し、rewrite 中に AOF を禁止し、AOF によるブロッキングを避けます。
デプロイに関する推奨事項:
- Redis インスタンスの物理マシンには十分なメモリを確保し、fork と rewrite に対応します。
- 単一の Redis インスタンスのメモリ上限はあまり大きくしないでください。例えば 4G または 8G。これにより、fork の速度が向上し、主従の同期やデータ移行の負担が軽減されます。
- CPU 集約型アプリケーションと一緒にデプロイしないでください。
- 高いディスク負荷のアプリケーションと一緒にデプロイしないでください。例えば:データベース、メッセージキュー。
スロークエリ#
Redis で特定の閾値を超える時間がかかるコマンドを実行することをスロークエリ(クエリだけでなく)と呼びます。Redis は単一スレッドのため、スロークエリはブロックされます。
スロークエリの閾値は設定で指定できます:
- slowlog-log-slower-than: スロークエリの閾値、単位はマイクロ秒。デフォルトは 10000 で、推奨は 1000 です。
スロークエリはスロークエリログに記録され、ログの長さには上限があります。設定で指定できます:
- slowlog-max-len: スロークエリログ(本質的にはキュー)の長さ。デフォルトは 128 で、推奨は 1000 です。
スロークエリログリストを表示:
- slowlog len: スロークエリログの長さを確認
- slowlog get [n]: [n]/ すべてのスロークエリログを読み取る
- slowlog reset: スロークエリリストをクリア
この記事は Mix Space によって xLog に同期更新されました。原始リンクは https://blog.0xling.cyou/posts/redis/redis-2