ホームページ  >  記事  >  バックエンド開発  >  拡大する

拡大する

WBOY
WBOYオリジナル
2016-06-13 12:29:14826ブラウズ

大規模 Web サイトの最適化 - memcache テクノロジー

大規模 Web サイトの最適化 - memcache テクノロジー

メモリ キャッシュ メモリ キャッシュ

memcache の概要

memcache は のセットです分散高速キャッシュ システムは、LiveJournal の Brad Fitzpatrick によって開発され、現在、特に一部の Web サイトのアクセス速度を向上させるために多くの Web サイトで使用されています。大規模データベースへのアクセスが頻繁に必要なWebサイトのアクセス速度向上の効果は非常に大きいです。これは、BSD ライセンスに基づいてリリースされた オープン ソース ソフトウェア のセットです。 [百度百科より抜粋]

公式サイト: http://memcached.org/

分散型: 複数の Memcache サーバーがデータを管理する構造。

キャッシュ システム: ユーザーがクエリしたデータをメモリにキャッシュし、次回からメモリから直接取得できるようにします。ディスク IO オーバーヘッドを削減します。

nosql とは何ですか? (SQL リレーショナル データベース)

答え: MySQL はリレーショナル データベースと呼ばれます (主な特徴は、2 次元のテーブル構造 (テーブル内の行と列) であり、テーブル間にリレーションシップがあることです) ( oracle (Java)、db2、sqlserver)

非リレーショナル データ: SQL ステートメントをクエリとして使用しないデータベース (データを保存するシステム) )、厳密な意味での 2 次元テーブルの概念はありません。そのデータ構造はすべて巨大なハッシュ テーブル (キーと値) です。

ハッシュ テーブルの利点: 時間計算量は 0 (1) です。データが増加するにつれて、クエリ時間は桁違いに存在しなくなります ( 1s )が変化します。

ハッシュ テーブルの欠点: ハッシュの衝突 異なるキーが同じ値に対応する

tr>

key1 ===MD5(sql)

key1 ===MD5(sql)

Asion

key2

12

key3

shenzhen

key4

iphone

アシオン

key2

12

key3

深セン

key4

iphone

  1. 使用原則

    使用する場合は、まず nosql データベースから取得します。ない場合は直接返します。 、まず MySQL から取得し、次に memcache にキャッシュし、次回は memcache から直接返します。

  2. memcache と MySQL の違い
  3. SQL ステートメントは使用されません
  4. Memcache には MySQL のテーブルの概念がなく、キーと値を使用して保存されます。
  5. memcache のデータはメモリに保存され、電源を切ると失われます。オフになっています (データの永続化を保存するには?)

    1. MemcacheDB はデータを永続化できます。 2. 再キャッシュ もデータ永続性を実現できます

    : NoSQL で実現できるかどうかMySQL (リレーショナルデータベース) を入手しますか?

    答え: nosql の存在は、MySQL (リレーショナル データ) を置き換えることを意図したものではなく、リレーショナル データを補足するものです。リレーショナル データベースには独自の機能 (トランザクション、ストアド プロシージャ) があるためです。

    Nosql の主な使用シナリオ: ソーシャル ネットワーキング Web サイト (Renren、Xiaonei、Douban)

    授業後に学習: C10K 問題とは何ですか? C100K

    回答: c10k の意味は、Web サイトの同時実行数が 1w に達すると、Web サイトの全体的な構造が完全に更新されるということであり、これは c10k と呼ばれます。NoSQL データベースによって完全に解決されました。 。しかし、c100kには別の問題がありますか?

    アーキテクチャ Web サイト:

    http://www.infoq.com/

    memcache のインストール (ポート 11211 を使用)

  6. Windows でのインストール

    1.1 memcached ファイルを特定のフォルダーに直接配置します (中国語名のフォルダー | スペースは使用しないでください)

    1.2 cmd で次のコマンドを実行します ( を閉じることはできません )。Ctrl C を使用して

    memcache port 112 11 を終了できます。

    1.3 起動しているか確認し(新しいウィンドウを開く)、以下のコマンドを実行

    # netstat -an

  7. Linux でのインストール
    1. putty--"Linux へのリモート接続用のクライアント ツール
      1. 注: 一般接続がオンになっていません (ファイアウォール)
        1. ファイアウォールをオフにします

        2. selinux は閉じられていません

          selinux をすぐに有効にします

          2.1 環境準備

          Linux 環境では、gcc、g-c、make (makefile)、cmake、autoconfig (configure)、libtool が必要です。 Linux で他のツール

          がインターネット に接続されている場合、次のコマンドを使用します

          # yum install

          - y gcc make cmake autoconfig libtool

          -y 対話型確認を使用する必要はありません

          2.2 memcached をコンパイルしてインストールします

          memcached は

          libevent ライブラリに依存しているため、最初にインストールし、それぞれの公式 Web サイトから安定バージョンをダウンロードする必要があります libevent 公式 Web サイト: http://libevent.org/

          memcache 公式 Web サイト: http://memcached.org/

          まず libevent をコンパイルしてインストールし、次に memcached をコンパイルしてインストールします同時に、memcached をインストールするときに libevent のインストール パスを指定する必要があります

          具体的な手順:

          アップロード

        3. 最初に libevent をダウンロードし、解凍してインストールします (通常、Linux でのソフトウェアのインストールは /usr/local/src ディレクトリに配置され、インストールされたソフトウェアは通常 /usr/local に配置されます) /NAME)

          # ./configure --prefix=/usr/local/libevent && make && make install

          b. memcache をインストールし、解凍し、コンパイルしてインストールします

          # ./configure --prefix=/usr/local/memcached --with- libevent=/usr/local/libevent && make && make install

          2.3 Memcached の起動

          # /usr/local/memcached/bin/memcached -m 64 -p 11211 -uEveryone -vv

          : この時点では Memcached は正常に起動しますが、情報はコンソールに出力されます。

          memcached を バックグラウンド でサービスとして開始する場合は、-d オプション (デーモン バックグラウンド)

          # /usr/local を追加するだけです。 /memcached/ bin/memcached -m 64 -p 11211 -uEveryone -d

          サーバーが正常に起動するかどうかを確認するにはどうすればよいですか?

          # ps axu | memcached

          パラメータ情報を表示する必要がある場合は、memcached を使用します-h ヘルプの表示:

          オペレーション memcache

          Memcached のクライアント/サーバー通信は非常に単純で、テキストベースのプロトコルに似ています。 http プロトコルでは、対話に Telnet を直接使用できます。

          Telnet 操作を使用します (終了するには終了します)

          # telnet サーバー IP 11211

        4. Windows の場合

          接続後、ctrl ] を使用して Telnet エコーを開きます

        5. Linux の場合

          2. 基本コマンド:

          memcache の追加、削除、変更、クエリ コマンドを学習します:

          add key flag期限切れ長

          key: name

          flag: 1 memcache文字列として保存します

          expire: 有効期限、memcache 時間

          length: データ長 (B)

          ※add add

          # add name 1 0 2 # memcache サーバーにキー 2 バイトの名前を追加します。有効期間は長期です。

          有効期限の理解方法

          キャッシュの有効期間を設定します。3 つの形式があります

        6. 開始秒数を設定します設定から、n 秒
        7. タイムスタンプの後に無効、指定されたタイムスタンプ
        8. が 0 に設定された後に期限切れになります、自動的に期限切れになりません (永続的な有効ではないことに特に注意してください。 a. memcache がインストールされている場合、最大有効期間が指定されます。デフォルトは 30 日です (ソース コード) b. それより短い場合は、期限切れになる可能性があります。 30 日以上)

          最も最近使用されていない原則

          ※削除 delete

          # 削除キー

          ※replace replace

          # replace キーフラグの有効期限の長さ

          ※get get

          # キー取得

          ※set データに置換がある場合は追加、そうでない場合は

          # set key flag 有効期限長

          名前は存在します:

          年齢は存在しません:

          ※増分

          # 増分 NUMBER

          ※減少減少

          # 減少年齢 NUMBER

          ※stats 統計情報 memcache サーバー情報

          # stats

          ※flush_all 全データクリア

          # flash_all

          php 操作を使用memcache

        9. Windows の場合
        10. (http://downloads.php.net/pierre/) に移動して拡張 DLL ファイルをダウンロードします
        11. phpのextension_dirに対応するディレクトリにファイルを置きます
        12. php.iniファイルを修正し、extension=php_memcache.dllを追加し、ファイルをインポートします
        13. Apache を再起動します

        14. Linux (Linux で php の拡​​張機能を開く方法、一般的な解決策について話しましょう )
          1. (http://pecl.php.net/package/memcache) に移動して、拡張機能のソース コードをダウンロードします

            beta: ベータ版: 一般に小さなバグがいくつかありますが、問題がある場合はユーザーが使用して確認する必要があります。公式にフィードバックを送信できます。その後、修復を行ってください

            アルファ: 内部ベータ版: 開発中に内部で使用されたバージョン。一般に、このバージョンには多くのバグがあります。ただし、このバージョンには新しい機能が追加されることがよくあります。 (通常、新しい企業のみがそれを試行します。) アルファ版にはいくつかの補償があります。

            stable: 安定版: 基本的にバグがなく、安定して実行できます。

            ftp 使用時の注意:

          2. vsftpd サービスが正常に開かれているかどうかvsftpd ステータス
          3. 一般に、ftp への接続には一般ユーザーのみを使用できます (root として ftp に接続することはできません)。sudo を使用します。
          4. ホーム ディレクトリのサイズが不十分です (ファイルのアップロードは成功しましたが、表示されるサイズは 0 です)
          5. ファイアウォールがオフになっているかどうか (iptables -F off) (iptables -L)

            # cls

            # cd

            # vim .bashrc

            Linux ダウンロード最終行モード

            # :x 小文字 exit wq

            編集モードの Linux

            # Z 大文字

            1. 通常、/usr/local/src ディレクトリにダウンロードして解凍し、フォルダー

                に入ります
              1. 現在のものを使用します。php の phpize コマンドにより構成ファイルが作成されます ( は拡張ディレクトリ 内にある必要があります)

                # /usr/local/php/bin /phpize 絶対パス phpize

                d 設定ファイルを使用します。インストール パスを指定せずにシステム情報を収集するために上記で生成された

                # ./configure --with-php-config=/usr/local/php/bin/php-config php 設定ファイル

                e. コンパイルとインストールを実行します

                # make && make install

                注: 上記のコマンドの実行後に構造を表示できます

                # ls /usr/local/php/lib /php/extensions/no-debug-non-zts-20090626/

                1. php.ini 設定ファイルを変更し、Apache を再起動します

                  注: Linux で php.ini 設定ファイルの場所を確認するにはどうすればよいですか?

                  解決策: phpinfo();

                  注: Linux では、構成ファイルを変更する前に、必ず

                  php.ini-backup-2016-1- をバックアップしてください。 12

                  注: .so ファイルとは何ですか?

                  .so は Linux では共有オブジェクトです。Windows では .dll ファイルと入力します。

                  注: Linux では、

                  # pkill -9 httpd

                  # ps aux | grep httpd

                  #ps grep httpd

                  を使用できます。

                  次のように、上で生成したアドレスを php.ini 設定ファイルに追加します。

                  extension_dir=/usr/local/php/lib/php/extensions/ no- debug-non-zts-20090626/

                  extension=memcacahe.so

                  1. テスト

                    php に memcache のモジュールがあるかどうかをテストする test.php ファイルを作成します

                    php は memcache を操作し、値を保存および取得します

                    memcached のメモリ管理および削除メカニズム

                    注: Memcache は最大値です。 1Mのスペースしかありません。

                    注: メモリの断片化は常に存在します。問題は、メモリの断片化を最小限に抑えることができる方法だけです。

                    1. メモリの断片化とは何ですか?

                    この種のメモリ キャッシュ システムを使用すると、継続的な適用と解放により、使用できない小さなメモリの断片が形成されます。この現象はメモリの断片化と呼ばれます。この小さな赤いブロックは、オペレーティング システムが使用できない領域です。

                  2. どうやって解決しますか?

                    Memcache はスラブアロケータを使用して管理されます (各スラブクラスのサイズは 1M)

                    最小単位はチャンク (小さなブロック) と呼ばれます: データを保管する倉庫

                    複数の小さなユニットがチャンクを形成します: 複数の小さなブロックで構成されます (すべての小さなブロックは同じサイズです)

                    各スラブ クラスのサイズは 1M です

                  3. memcache の適切なサイズを選択するにはどうすればよいですか?

                    注: 122 バイトのスラブがいっぱいで、100 バイトのデータが来た場合、どこに保存する必要がありますか?

                    答え: 144 は間違いなく存在しません。チャンク 122 にまだ存在しており、データ ストレージの実装には LRU アルゴリズムが使用されています。

                  4. 固定チャンクによるメモリの無駄、22B

                  5. 因子調整

                    memcached が開始されると、-f で指定できる特定のサイズに従ってスラブ クラスが編成されます。

                    デフォルトは 1.25 で、隣接するチャンク間の比率は増加要因です。 Web サイトのビジネスに応じてキャッシュ係数のサイズを調整できます。

                    各ビジネスが異なり、必要な最小チャンクも異なるためです。データは独自のサイズを設定できるため、このパラメーターを使用すると、システムが自社のビジネスにさらに適応できるようになります。

                  6. memcache の 遅延削除

                    memcached は内部的にレコードの有効期限が切れているかどうかを監視しませんが、取得時にレコードをチェックします。タイムスタンプを使用して、レコードの有効期限が切れているかどうかを確認します。この動作は遅延有効期限と呼ばれます。したがって、memcached は有効期限の監視時に CPU 時間を消費しないという利点があります。

                    例: set(name, asion, 0, 3600) は 3600 秒後に期限切れになります。期限切れになった後は、get がクエリされた場合にのみ、期限切れかどうかが検出されます。有効期限が切れた場合は削除してください。

                    例 # add name 1 8 2 8秒経過すると無効になるのか、存在しないのか?統計による分析

                    分析: 存在しないのではなく、無効です。次回取得するときにのみ、memcache が有効期限が切れているかどうかを確認します。

                  7. memcache の LRU アルゴリズム

                    memcached は期限切れになったレコードの領域を優先して使用しますが、それでも新しいレコードを追加するときに領域が不足します。スペースを割り当てるための最も最近使用されていない (LRU) メカニズム。

                    名前が示すように、これは「最も最近使用されていない」レコードを削除するためのメカニズムです。したがって、memcached のメモリ空間が不足している場合 (スラブ クラスから新しい領域が取得できない場合)、最近使用されていないレコードから検索し、新しいレコードにその領域

                    を割り当てます。キャッシュの実用的な観点から見ると、このモデルは理想的です。

                    メカキャッシュ内のデータスペース (デフォルトは 64M) がいっぱいの場合、データを保存し続けることができますか?

                    回答: 期限切れのデータは削除する必要があります。期限切れでない場合は、後でデータを追加するためのスペースを確保するために、最もアクティブでないデータが削除されます。

                    例: 122Bytes のスラブを例に挙げると、データがいっぱいになったときに 100Bytes のデータが入ってきた場合、どう対処すればよいでしょうか。 (永続的に有効であってもキックされます)

                    分析: メモリ管理 LRU アルゴリズム 、FIFO アルゴリズム

                  8. memcache の一部のパラメーター Ctrl C

                    注: vim で ctrl s を入力すると、ctrl q を使用して

                    -p リスニング ポートを終了できます。

                    -l 接続の IP アドレス。デフォルトはローカル マシンです

                    -d start memcached サービスを開始します

                    -d restart memcached サービスを再開します

                    -d stop|shutdown 実行中の memcached サービスをシャットダウンします

                    -d install memcached サービスをインストールします

                    -d uninstall memcached サービスをアンインストールします

                    -u Run as (root として実行する場合のみ有効)

                    -m 最大メモリ使用量 (MB 単位)。デフォルト 64MB

                    注: システムが 32 ビットの場合、最大制限は 2G ですが、システムが 64 ビットの場合、制限はありません。

                    -M 項目を削除する代わりにメモリが枯渇した場合にエラーを返します

                    -c 同時接続の最大数、デフォルトは 1024 です

                    -f ブロック サイズ増加率、デフォルトは 1.25 です

                    -n 最小割り当てスペース、キー値フラグのデフォルトは 48

                    -h ヘルプを表示します

                    -v 警告およびエラー メッセージを出力します

                    -vv はクライアントのリクエストと戻り情報を出力します

                    -i は memcached と libevent の著作権情報を出力します

                    実際の使用シナリオ

                    保存 : 1. ファイル 2. mysql

                    質問: フォルダー内にセッション ファイルが多すぎて取得が遅くなる場合、どのように対処すればよいですか?

                    答え: 階層処理

                    保存には Memcache を使用、Memcache は分散ストレージを使用します (ストレージには複数の Memcache を使用)

                    Use memcache セッションの保存

                    1. php.ini ファイルを変更します。設定情報は次のとおりです

                    session.save_handler = memcache #representative memcache を使用してセッションを保存します

                    session.save_path ="tcp://127.0.0.1:11211" # memcache サーバーのアドレスとポートを指定します

                  9. テスト

                    1. セッションを開き、セッションを保存します

                  10. Memcache からセッションを取得します

                    高度な機能

                    分散型 memcache 構成

                    分散型とは何ですか?

                    単一の memcache のサービス機能には限界があるため、複数の memcache を使用してキャッシュ機能を提供できます。このアーキテクチャは、memcache の 分散キャッシュ (クラスター) キャッシュ システム

                    それを達成するにはどうすればよいですか?

                    このようにして、さまざまな Memcache サーバーにデータを分散する方法が理解できます。

                    クライアント上で分散を実装します。データを保存する前に、 特定のアルゴリズム に従って、データをその memcache サーバーに保存します。データを取得するときは、以前と同じアルゴリズムに従って、対応するデータを取得します。 . memcache サーバー上のデータを取得

                    分散アルゴリズム

                  11. 取得アルゴリズム

                    通常、このハッシュ関数は crc32( key ) % 3

                    crc32() この関数は文字列を 32 ビット整数に変換できます

                    欠点: サーバーがダウンした場合、またはサーバーを追加する必要がある場合、現時点では基本的に除数が変更されたため、キャッシュされたデータはすべて無効になります。 ゆるい計算式 ヒット率 = 取得したデータ数 / 総数 1/N N はサーバー数

                    発生する問題: memcache がダウンすると、キャッシュされたデータが無効になります。 MySQL 負荷が急激に増加します。

                    このとき、MySQL はクラッシュし、短時間で再び MySQL がクラッシュします (キャッシュの一部が壊れています)。再確立されました)、別のダウンタイム。時間が経つにつれて、MySQL は基本的に安定し、キャッシュ システムが正常に確立されました。キャッシュされたデータが存在しないため、すべてのリクエストを MySQL に転送する必要があります。この現象は memcache 雪崩現象と呼ばれます。

                    概要:

                  12. 整合性ハッシュの実装distribution

                  13. 0 から 2^32 までの正の整数がたくさんあるリングを想像してください。 distribution

                  14. ハッシュ関数 (crc32()) でサーバー ノードの数を計算した後、時計回りに上記のリングにマッピングします

                  15. 上記のハッシュ関数に従って保存するデータのキーを計算した後、ノード
                    自体と同じ大きさの に時計回りに保存します。 🎜>

                    注: memcache がダウンしている限り、データが失われます。ただし、データ損失を最小限に抑え、一貫性のあるハッシュを使用する方法を見つけなければなりません。たとえ 1 台のサーバーがダウンしても、影響を受けるのは 1 台のサーバー上のデータだけです。

                    仮想ノード: タスクの共有

                    キャッシュ雪崩現象

                    雪崩の原因は何ですか?

                    不適切なアルゴリズムとタッチ アルゴリズムにより、大量のキャッシュ エラーが発生し、雪崩を引き起こします
                  16. 解決策: 一貫したハッシュ アルゴリズム

                    キャッシュ時間は同じであり、キャッシュ システムはすべて同時に失敗し、雪崩を引き起こします
                  17. 解決策: キャッシュを設定します

                    あるmemcacheノードのキャッシュデータが無効化されたことにより、他のmemcacheノードのキャッシュヒット率が低下します。キャッシュ内の欠落したデータは MySQL データベースでクエリされます。 この期間中、MySQL サーバーに大きな負荷がかかり、

                    キャッシュ雪崩現象

                    と呼ばれるダウンタイムが発生しました。

                    MySQL を再起動後、短時間で再びクラッシュしましたが、MySQL を再起動すると一部のキャッシュ データが確立され、キャッシュが完全に再構築されました。クラッシュしなくなりました。

                    解決策: キャッシュ時間を範囲 (3 ~ 9 時間) 内のランダムな値に設定して、異なる期間で期限切れになり、再構築作業が異なる時間に割り当てられるようにします。 。

                    memcache の可用性を高める方法

                    これを実現するには、
                  18. repcached を使用します。キャッシュされたレプリケーションの完全名は memcached です。日本人が発明した高可用性技術、コピーバッファ技術。
                  19. MemcacheDB は、永続ストレージ システム の分散キー値形式です。 sina スタッフ によって開発されました。これはキャッシュ コンポーネントではなく、オブジェクト アクセスに基づいた、信頼性が高く、高速かつ永続的なストレージ エンジンです。このプロトコルは memcache (不完全) と一致しているため、多くの memcached クライアントが接続できます。 MemcacheDB は永続ストレージ コンポーネントとして Berkeley DB を使用するため、Berkeley DB の多くの機能をサポートします。拡張機能
                  20. Linux で PHP に拡張機能を追加する方法、一般的な手順を教えてください。

                    答え:

                    1. 対応する拡張機能のソース コードをダウンロードします
                    2. /usr/local/src/
                    3. 解凍してフォルダ
                    4. フォルダ内の絶対パスで phpize を実行
                      /usr/local/php/bin/phpize
                    5. configure ./configure --with-php-config=
                      /usr/local/php/bin/php-configmake && make install
                    6. ファイルの下に .so で終わるファイルを持つディレクトリ ファイルを生成します
                    7. php.ini ファイルを変更します
                    8. extension_dir = directory extension= .so ファイルを追加します
                    9. Apache を再起動します
                    10. phpinfo() を追加
                    11. ブラウザビュー
                    12. memcache のセキュリティを解決するにはどうすればよいですか?
                    13. 答え:

                      memcache の設計は非常にシンプルであるため、権限の設定にはまったく制限がありません。なぜ権限を設定しないのでしょうか?

                      はキャッシュ機能のみが提供されており、イントラネット 192.168.1.110 に配置されます。
                    14. ファイアウォール検証ルールを作成し、指定された IP を持つパケットのみの転送を許可し、その他すべてを破棄します192.168.1.221 --- 224

                      3. ファイルを使用してセッションファイルを保存する場合、ファイルが多すぎる場合はどうすればよいですか?

                      一般的に、セッション ファイルの数が 65535 を超えると、この時点でセッションの取得が非常に遅くなり、PHP コードの実行が非常に遅くなります。

                      答え:

                      階層処理: 1 つのフォルダー内に A-Z で始まるフォルダーを作成し、その後に A_Z が作成されます

                      memcache 処理を使用: 単一の memcache の処理能力には制限があります、つまり、分散型 memcache を使用して

                      を処理する方法 ロード バランシング クラスターも高可用性クラスターであることを理解する方法ですが、実際はそうではありません。
                    15. 回答: ロード バランシング クラスターは高可用性機能を提供し、特定のマシンがダウンしても通常のサービスを提供できますが、サービスの提供は少し難しくなります。

                      負荷分散クラスターは

                      キープアライブ メカニズムを提供していないためです。監視メカニズム

                      ケース:

                      プロジェクトで Memcache を使用するには?

                      Memcache の目的は、データをキャッシュし、MySQL への負荷を軽減することです。

                      一覧ページを書く
                    16. 詳細ページ
                    17. 拡張機能

                      Linux に PHP 拡張機能をインストールする一般的な方法
                    18. 答え:

                      対応する拡張機能のソース コードをダウンロードします http://pecl.php.net/package/memcache
                    19. 拡張機能を Linux サーバーにアップロードし、(/usr/local/src/)
                    20. に配置し、tar -zxvf NAME.tar.gz
                    21. cd NAME
                    22. phpize 命名は拡張パッケージのディレクトリ内に絶対パス (/usr/local/php/bin/phpize) で実行する必要があります
                    23. 実行 ./configure --with-php-config=/usr/local/php/bin/php-config (--with-php-config=絶対パスの下の php-config のパス)
                    24. make && make install
                    25. は、ディレクトリ
                    26. を生成します。ディレクトリ
                      の NAME.so ファイルがあります
                    27. php.ini 設定ファイルを変更し、2 行の情報を追加します。

                      extension_dir='上記で生成されたディレクトリ'

                      extension='NAME.so'

                    28. Apache を再起動し、phpinfo() 関数を使用してテストします。検索に Memcache がある場合は、拡張機能がインストールされていることを意味します。無事に開きました。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP の通常のソート アルゴリズムと二分探索次の記事:PHP の通常のソート アルゴリズムと二分探索

関連記事

続きを見る