検索
ホームページデータベースRedisRedis がメモリを節約する仕組み

まず第一に、画像 ID を通じてユーザー UID を逆チェックするこのアプリケーションには次の要件があります。

  • クエリ速度が十分に速い必要があります

  • すべてのデータはメモリに保存する必要があります。できれば EC2 の高メモリ モデル (17 GB または 34 GB、68 GB は無駄すぎます)

  • 永続化をサポートします。サーバーの再起動後にウォームアップする必要があります

まず第一に、彼らはデータベース ストレージ ソリューションを拒否し、KISS 原則 (Keep It Simple and Stupid) を維持しました。使用しない データベースの更新機能、トランザクション機能、関連クエリなどの優れた機能がないため、これらの使用しない機能のためにデータベースを選択して維持する必要がありません。

そこで彼らは Redis を選択しました。Redis は永続性をサポートするインメモリ データベースです。すべてのデータはメモリに保存され (VM は忘れてください)、最も簡単な実装は Redis の String 構造を使用することです。キーと値店がやります。

SET media:1155315 939
GET media:1155315
> 939

このうち、1155315 がピクチャー ID、939 がユーザー ID なので、それぞれのピクチャー ID をキー、ユーザー uid を値として、キーと値のペアとして保存します。そこで、上記の方法でデータを保存したところ、100万枚のデータで70MB、3億枚の写真で21GBのメモリを使用するテストが行​​われました。予算の17GBと比べると、やはり使い過ぎです。

(NoSQLFan: 実際、ここに最適化ポイントが見られます。キー値の前にある同じメディアを削除し、数値のみを保存できます。これにより、キーの長さが短縮され、メモリが削減されます。キー値のオーバーヘッド [ 注: Redis のキー値は文字列から数値に変換されないため、ここに保存されるのはメディアの 6 バイトのオーバーヘッドのみです:]。実験後、メモリ使用量は次のように削減されます。 50MB、合計メモリ使用量は 15GB で、ニーズは満たしていますが、その後の Instagram の改善がまだ必要です)

そこで、Instagram の開発者は、Redis の開発者の 1 人である Pieter Noordhuis に最適化計画について尋ねました。 、そして、答えはハッシュ構造を使用するというものでした。具体的な方法としては、データを分割してハッシュ構造を用いて格納する方法ですが、ハッシュ構造は単一のハッシュ要素が一定数以下の場合に圧縮して格納するため、メモリを大幅に節約できます。これは上記の String 構造には存在しません。構成ファイル内の「hash-zipmap-max-entries」パラメータは、特定の数を制御します。開発者による実験の結果、hash-zipmap-max-entries を 1000 に設定するとパフォーマンスが向上しましたが、1000 を超えると、HSET コマンドによる CPU 消費量が非常に大きくなります。

そこで彼らは計画を変更し、次の構造でデータを保存しました。

HSET "mediabucket:1155" "1155315" "939"
HGET "mediabucket:1155" "1155315"
> "939"

7 桁の画像 ID の最初の 4 桁をハッシュ構造のキー値として取得することで、各ハッシュの内部には 3 桁のキー (1,000) のみが含まれていることを保証します。

別の実験を行った結果、1,000,000 キーごとに消費されるメモリはわずか 16MB であることがわかりました。合計メモリ使用量も 5GB に削減され、アプリケーションの要件を満たします。

(NoSQLFan: 同様に、ここでも最適化できます。1 つ目は、ハッシュ構造のキー値を純粋な数値に変更し、キーの長さが 12 バイト減少することです。2 つ目は、キーの長さを変更することです。ハッシュ構造のキー値。サブキー値は 3 桁になり、以下に示すようにオーバーヘッドが 4 バイト削減されます。実験後、メモリ使用量は 10MB に削減され、合計メモリ使用量は 3GB になります)

リーリー

以上がRedis がメモリを節約する仕組みの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Redis:データストアとサービスとしてどのように機能するかRedis:データストアとサービスとしてどのように機能するかApr 24, 2025 am 12:08 AM

redisactsassassadatastoreandaservice.1)asadatastore、itusesin memorystorage for fastorations、supporting variousdatastructureSlike-key-valuepairsandsortedsets.2)asaservice、iteasruascruascriptingrupting criptingforceptingpurplecomplecomplecprexoperations

Redis vs.その他のデータベース:比較分析Redis vs.その他のデータベース:比較分析Apr 23, 2025 am 12:16 AM

他のデータベースと比較して、Redisには次の独自の利点があります。1)非常に速い速度、および読み取り操作は通常、マイクロ秒レベルにあります。 2)豊富なデータ構造と操作をサポートします。 3)キャッシュ、カウンター、公開サブスクリプションなどの柔軟な使用シナリオ。 Redisまたはその他のデータベースを選択する場合、特定のニーズとシナリオに依存します。 Redisは、高性能および低遅延のアプリケーションでうまく機能します。

Redisの役割:データストレージと管理機能の調査Redisの役割:データストレージと管理機能の調査Apr 22, 2025 am 12:10 AM

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

Redis:NOSQLの概念の理解Redis:NOSQLの概念の理解Apr 21, 2025 am 12:04 AM

Redisは、大規模なデータの効率的なストレージとアクセスに適したNOSQLデータベースです。 1.Redisは、複数のデータ構造をサポートするオープンソースメモリデータ構造ストレージシステムです。 2.キャッシュ、セッション管理などに適した、非常に速い読み取り速度と書き込み速度を提供します。 4.使用例には、基本的なキー値ペア操作と高度なコレクション重複排除関数が含まれます。 5.一般的なエラーには、接続の問題、データ型の不一致、メモリオーバーフローが含まれるため、デバッグに注意する必要があります。 6.パフォーマンス最適化の提案には、適切なデータ構造の選択とメモリ排除戦略の設定が含まれます。

Redis:実際のユースケースと例Redis:実際のユースケースと例Apr 20, 2025 am 12:06 AM

現実世界でのRedisのアプリケーションには、1。キャッシュシステムとして、データベースクエリを加速し、2。Webアプリケーションのセッションデータを保存するには、3。リアルタイムランキングを実装する4。メッセージ配信をメッセージキューとして簡素化する。 Redisの汎用性と高性能により、これらのシナリオで輝きます。

Redis:その機能と機能の調査Redis:その機能と機能の調査Apr 19, 2025 am 12:04 AM

Redisは、高速、汎用性、豊富なデータ構造のために際立っています。 1)Redisは、文字列、リスト、コレクション、ハッシュなどのデータ構造をサポートし、コレクションを注文します。 2)メモリを介してデータを保存し、RDBとAOFの持続性をサポートします。 3)Redis 6.0から始めて、マルチスレッドI/O操作が導入されました。これにより、高い並行性シナリオでパフォーマンスが向上しました。

RedisはSQLまたはNOSQLデータベースですか?答えが説明しましたRedisはSQLまたはNOSQLデータベースですか?答えが説明しましたApr 18, 2025 am 12:11 AM

redisisclassifiedsaNosqldatabasebasesakey-valuedataModelinsteaded ofthetraditionaldatabasemodel.itoffersspeedand andffficability、makingidealforreal-timeaplications andcaching、butmaynotbesbesutable fors cenariois requiring datientiantientioniity

Redis:アプリケーションのパフォーマンスとスケーラビリティの向上Redis:アプリケーションのパフォーマンスとスケーラビリティの向上Apr 17, 2025 am 12:16 AM

Redisは、データをキャッシュし、分散ロックとデータの持続性を実装することにより、アプリケーションのパフォーマンスとスケーラビリティを向上させます。 1)キャッシュデータ:Redisを使用して頻繁にアクセスしたデータをキャッシュして、データアクセス速度を向上させます。 2)分散ロック:Redisを使用して分散ロックを実装して、分散環境での操作のセキュリティを確保します。 3)データの持続性:データの損失を防ぐために、RDBおよびAOFメカニズムを介してデータセキュリティを確保します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。