何人かのテスト友達が私に尋ねてきました。Redis をテストするにはどうすればよいですか? まず最初に、redis とは何なのかを知る必要があります。それは何ができますか
Redis は、キーバリュー型の高速ストレージ データベースです。
Redis は、キャッシュ、キュー、パブリッシュとサブスクライブなどとしてよく使用されます。
したがって、「redis をテストするにはどうすればよいですか?」という質問は次のように変換できます。
キャッシュをテストするにはどうすればよいですか?
キューをテストするにはどうすればよいですか?
サブスクリプションをテストするにはどうすればよいですか?
私がこれまで接してきた技術スタックでは、パブリッシュとサブスクライブに Redis が使用されることはほとんどありません。主にキャッシュとキューについて説明します。
01. キャッシュの分類
キャッシュには、ファイル キャッシュ、データベース キャッシュ、メモリ キャッシュ、ブラウザ キャッシュなど、いくつかの種類があります。
ブラウザのキャッシュとは、ブラウザ自体のキャッシュ機能を指します。ページの読み込みを高速化するために、最近のブラウザでは、css や js などのリソース ファイルを一度ダウンロードし、キャッシュが失敗するか、更新が必要であることがリクエストによって明示的に通知されるまで、一定期間キャッシュします。
インターフェイスがバックエンド言語、 smarty、およびその他のテンプレート レンダリング メソッドの直接レンダリングを通じて出力される場合、通常はファイル タイプ キャッシュが選択されます。
大規模なフロントエンド テクノロジの急速な発展に伴い、フロントエンドとバックエンドの分離がますます一般的になり、smarty レンダリング手法の使用はますます少なくなり、バックエンド サービスのインターフェイス応答時間の要件はますます高まっています。ファイル キャッシュはこのシナリオには適さなくなり、データベース キャッシュの人気が高まっています。
現在、データベース キャッシュが最も一般的なのは、redis と memcached です。どちらも分散キーバリュー キャッシュ システムです。
メモリ キャッシュはデータベース キャッシュに似ていますが、テクノロジ スタックによって制限されます。たとえば、Java は使用でき、Java は非常に頻繁に使用されますが、PHP は使用できません。メモリキャッシュはデータベースキャッシュに比べて高速ですが、常にメモリを増やすことができないため制限が多く、注意しないとメモリリークなどの問題が発生します。
実際の使用では、Java インターフェイスは多くの場合、一部の高頻度データを 1 次キャッシュとしてメモリ キャッシュに詰め込み、準高頻度データを 2 次キャッシュとして redis に詰め込み、最後にそのデータをクエリします。データベース。
キャッシュの役割:
上記の内容から、キャッシュの 2 つの最も重要な機能は、アクセスの高速化とサーバーと DB の負荷の軽減であることはすでにご存知かもしれません。
02. キャッシュの利用シーン
上記はテストとは何の関係もないのではないかと疑問に思われるかもしれません。いいえ、上記のことを知っておくとテストに役立つと思います。技術的な実装の観点から、いつキャッシュを追加すべきか、いつキャッシュを追加すべきでないか知っていますか? これはインターフェイスの技術的な制御であり、開発者だけでなくテスターも知っておく必要があります。
圧力テストの前に、キャッシュを追加せずにキャッシュを追加する必要があるインターフェイスを発見したら、誇りに思いませんか? 実際にはキャッシュの役割に一つ一つ対応しており、インターフェースのqpsが高い場合(例えば100以上)、応答速度が要求される場合、サーバー性能やDB性能が悪い場合、キャッシュを使用して問題を解決してみることができます。
いくつか例を挙げてみましょう。
1. WeChat の新しいバージョンでは、パーソナル センターに追加の「ステータス」機能があります。
WeChat ユーザーの数は非常に多く、アクセス QPS は非常に高く、数十万人が同時にアクセスし、毎回データベースにクエリを実行することは不可能です。
この種の要求と同様に、一般的なアプローチは次のとおりです。まずユーザーの状態データをアプリ (ブラウザー キャッシュ) にキャッシュし、バックエンド インターフェイスを呼び出して、一定期間のアクティブなプッシュまたはパッシブなプルで「状態」データをリクエストします。 time ; インターフェイスは redis/memcached キャッシュからデータを読み取り、それを返します。データ量がそれほど大きくない場合、インターフェイスはメモリ キャッシュから直接データを読み取り、それを返すことができます。データが返された後、キャッシュはユーザーアプリが更新されました。
2. 小規模な電子商取引会社のプロダクト管理バックグラウンド一覧ページがありますが、訪問者数は多くなく、SKU の変更頻度も非常に低く、3 日間で数十回訪問されることもあります。この種のシナリオではキャッシュを使用する必要はありません。また、製品情報が更新された直後に更新されたデータを確認する必要があるため、キャッシュには適さないため、キャッシュの使用はお勧めできません。
3. 同じ e コマース管理の背景で、今回は昨日/今日/ほぼ 1 週間の商品の売上をカウントする統計ページです。
このシナリオにはさまざまな解決策があります。
(ビッグデータ統計に関するさまざまな技術的解決策を脇に置き、システムの統計機能をシンプルに実現します)
リアルタイムの統計は必要ありません
定期的な統計を作成する必要があるのは 1 回だけです。たとえば、昨日の統計データを見るだけで済みます。統計データは、スケジュールされたスクリプトによってカウントされた後、データベースに直接保存でき、必要なときにデータベースに直接クエリできます。統計データを表示するには
リアルタイム統計をクエリする必要がある
ただし、クエリが必要な各統計 SQL の実行効率は期待どおりです。データを表示するたびにデータベースに直接クエリを実行でき、現時点ではデータベースに大きな負荷がかかっていません。
リアルタイム統計をクエリする必要がある
また、ビジネスデータが膨大なため、各統計 SQL の実行効率が非常に低い、または直接カウントできないため、各指標を集計して統計値をキャッシュに保持することができます。たとえば、売上情報が必要な場合、毎回製品が販売されると、販売統計キャッシュ +1、統計データを表示するときに、この時点でキャッシュをクエリできます
03. キャッシュの生成方法
キャッシュの使用シナリオを理解した後、キャッシュがどのように生成されるかについて説明します。
一般に、キャッシュを使用するには 2 つの方法があり、それらを簡単に要約すると、「外 」と「 内 」です。
まず、プログラム内でインターフェイス要求がどのように処理されるかについて説明します。
これは一般的な MVC で、Controller がリクエスト データを受信して処理し、Service が Model で取得したデータを処理し、View が出力します。
さまざまなシナリオに応じて、さまざまな方法で複数のノードにさまざまなキャッシュを追加し、さまざまな問題を解決できます。
たとえば、リクエスト パラメータの変更に応じて、返されたデータがリクエスト パラメータに強く関連している場合、クエリされたデータを (リクエスト パラメータがフィルタリングされた後) 「外部」にキャッシュすることが適切です。このタイプのデータは通常、5 分間などの短期間キャッシュされます。主に、短期間に同じリクエスト パラメータを持つ繰り返しリクエストを処理します。リクエスト攻撃に遭遇した場合、キャッシュの有効期間がわずか 1 秒であっても、非常に効果的であり、多数のリクエストをブロックできます。
たとえば、リクエストパラメータがあまり変化せず、返されるデータがデータベースに格納されているデータに非常に近い場合、データを「内部」にキャッシュする、つまりデータベースを更新しながらキャッシュを更新するのが適しています。この状況の最適な状態では、キャッシュを読み取るだけで十分であり、DB と直接やり取りする必要がないため、DB への負担が大幅に軽減されます。このキャッシュの有効期間は非常に長く設定できます。
04. キャッシュの更新方法
世代について話した後は、キャッシュの更新について話しましょう。通常、キャッシュは生成された後は変更されないため、キャッシュを更新する必要があります。
更新するにはいくつかの方法があります。
-
有効期限切れ後の自動更新: これは最も遅い更新方法です。キャッシュの有効期間を設定すると、キャッシュの有効期限が切れた後、新しいリクエストによって新しいキャッシュが自動的に作成されます。
-
キャッシュの削除: DB データを更新した後、キャッシュを直接削除し、新しいリクエストを通じて新しいキャッシュを自動的に作成します。
-
キャッシュをリセットする: DB データを更新した後、キャッシュを直接リセットします。
05. Redisキャッシュテストポイント
1. 性能試験の角度
キャッシュ増加・更新機能が正しいか、キャッシュデータが正しいか確認する
-
関連ログの追加、ログの表示
-
バックドアツール
-
コマンドラインを使用すると、memcached と reids にログインして直接表示できます。
キャッシュの削除
-
有効なキャッシュ、関連するビジネス機能を検証する
-
キャッシュが削除され、関連するビジネス機能が検証されます。
-
キャッシュの有効期限が切れて期限切れになったり、memcachedやredisで有効期限を設定したり、有効期限があるかどうかを確認したりできますよね?
過剰除去の仕組み:キャッシュが上限に達した場合の対処方法
キャッシュの侵入
キャッシュ雪崩
Redisキャッシュサービスが停止しました
キャッシュタイムアウト
キャッシュされたデータが誤って変更された場合、指定したバージョンにすぐに復元します
キャッシュデータを誤って削除してしまった場合は、速やかにデータを復元してください
2. Redis 機能のテスト角度
-
Redis データが有効になったとき、読み取り値は正しいですか?
-
Redis データが存在しません。通常、DB から正しい値を読み取り、Redis に書き込んで上位層に返すことができますか?
-
redis や db にデータが存在しない場合、パフォーマンスは正常ですか?
-
データを削除するとき、redis と db のデータは一貫していますか?
最後に、私の記事を注意深く読んでくださった皆さんに感謝します。互恵性は常に必要です。それはそれほど価値のあるものではありませんが、必要な場合はそれを取り上げることができます。
ソフトウェアテストインタビューアプレット
ソフトウェア テストの質問バンクには、何百万人もの人が参加しました。!!誰が知っているのか!!!ネットワーク全体で最も包括的なクイズ ミニ プログラムです。携帯電話を使用して、地下鉄やバスの中でもクイズに答えることができます。
次の面接の質問セクションが取り上げられます。
1. ソフトウェアテストの基礎理論、2. Web、アプリ、インターフェース機能テスト、3. ネットワーク、4. データベース、5. Linux
6. Web、アプリ、インターフェイスの自動化、7. パフォーマンス テスト、8. プログラミングの基本、9. 時間面接の質問、10. 公開テストの質問、11. セキュリティ テスト、12. コンピューターの基本
これらの資料は、[ソフトウェア テスト] の友人にとって最も包括的で完全な準備倉庫となるはずです。この倉庫は、最も困難な旅を乗り越える何万人ものテスト エンジニアにも同行してきました。あなたにも役立つことを願っています。