目次
C 文字列
SDS (動的文字列)
違い
ホームページ データベース Redis Redis SDS と C 文字列の違いに関する簡単な説明

Redis SDS と C 文字列の違いに関する簡単な説明

Apr 29, 2021 am 11:00 AM
redis sds

この記事では、Redis SDS 動的文字列と C 文字列の違いを紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

Redis SDS と C 文字列の違いに関する簡単な説明

#Redis の最下位層は、それを表すために "C 文字列" を使用しませんが、デフォルトの文字列表現に独自に構築された "SDS 抽象型" を使用します。 [関連する推奨事項: Redis ビデオ チュートリアル ]

C 文字列

C 文字列に格納されたデータの末尾には null 文字が含まれます。 たとえば、「redis」の実際の形式は 'R' 'E' 'D' 'I' 'S' '\0'

SDS (動的文字列)

です。

SDS は redis によって構築された抽象型で、主に redis のデフォルトの文字列表現、AOF モジュール内の AOF バッファ、およびクライアント ステータス入力バッファを格納するために使用されます。

SDS 抽象型コンテンツには次のものが含まれます:

  • int len、文字列

  • int free の長さを記録するために使用されます。 used buf array

  • char buf[] 内の未使用のバイト数を記録するには、バイト配列を使用して文字列

を保存します。 SDS 構造は下図のとおりです

Redis SDS と C 文字列の違いに関する簡単な説明

違い

1.長さを求める場合

C 文字列は文字列の長さを知るために走査する必要があり、複雑さは O(n) です。

SDS は内部の len 属性にアクセスするだけでよく、時間複雑さは O です(1).

2. バッファ オーバーフローの問題

C 文字列は S1 を "redis" として設定しますが、それに隣接する S2 が "abc" として存在します。 S1 が関数 strcat を通じて S3 "ccc" に接続されている場合、最終結果は "redisccc" になるはずですが、S1 に設定されたメモリが十分でない場合、これにより S2変更する隣にあります。

SDS は、まずスペースが十分であるかどうかを判断し、十分でない場合は、スペースが十分な位置に拡張され、len 長の未使用の空きスペースが追加されます。 Redis 文字列は 5 であり、その後追加されます。スペースは同じ長さの 5 に事前に割り当てられており、最終的な実際のスペース長は空き len 1 ~ 10 です。

3. 文字列のメモリ割り当て

c 文字列では、データが特定の文字列に追加または削減されると、メモリが再適用されます。アプリケーションは必然的にパフォーマンスの低下につながるため、N 回変更されると、N 回割り当てられることになります。

SDS は内部で 2 つのメカニズムを使用します: 遅延スペース解放とスペース事前割り当て

スペース事前割り当て:

スペース事前割り当て: 実行時を指します。スペース割り当て 、元のベースで len 長のスペースを割り当てます

ここで、SDS 長が 1M 未満の場合、空き = len になります。たとえば、SDS 長が 6 バイトの場合、実際の領域は 6byte 6byte 1byte

1M より大きい場合、さらに 1M だけが割り当てられます。 free = 1M 例えば、SDS 長が 60M の場合、実際の領域は 60M 1M 1byte

Lazy space release

ある文字列を削減すると、このようになります。プログラムは、短縮されたバイトをリサイクルするためにすぐにメモリの再割り当てを使用しませんが、その後の使用のために空きを介してそれらを記録します。また、SDS は、遅延領域によるメモリの無駄を防ぐための対応する API も提供します。

4. バイナリ セキュリティ

c 文字列は最終的に null 文字で終了しますが、特殊なデータに null 文字が必要な場合、データは最初のヌル文字より前のデータが事前に認識されます。 SDS SDS は長さに基づいて文字列を識別するため、データの正確性を保証できます。

5. 一部の C 言語関数と互換性があります SDS も C の null 文字末尾に従っているため、C の一部の関数を使用できます

#概要

Redis SDS と C 文字列の違いに関する簡単な説明

学習中にメモを記録し、深めて覚えて、続けてください。ご質問がございましたら、ご指摘ください。ありがとうございます。

プログラミング関連の知識について詳しくは、

プログラミング ビデオをご覧ください。 !

以上がRedis SDS と C 文字列の違いに関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 11 10.0.22000.100 のインストール時の 0x80242008 エラーの解決策 Windows 11 10.0.22000.100 のインストール時の 0x80242008 エラーの解決策 May 08, 2024 pm 03:50 PM

1. [スタート]メニューを起動し、[cmd]と入力し、[コマンドプロンプト]を右クリックし、[管理者として実行]を選択します。 2. 次のコマンドを順番に入力します (注意してコピーして貼り付けてください): SCconfigwuauservstart=auto、Enter キーを押す SCconfigbitsstart=auto、Enter キーを押す SCconfigcryptsvcstart=auto、Enter キーを押す SCconfigtrustedinstallerstart=auto、Enter キーを押す SCconfigwuauservtype=share、Enter キーを押す netstopwuauserv 、enter netstopcryptS を押す

PHP機能のボトルネックを分析し、実行効率を向上 PHP機能のボトルネックを分析し、実行効率を向上 Apr 23, 2024 pm 03:42 PM

PHP 関数のボトルネックはパフォーマンスの低下につながります。これは、ボトルネック関数を特定し、パフォーマンス分析ツールを使用するという手順で解決できます。結果をキャッシュして再計算を減らします。タスクを並列処理して実行効率を向上させます。文字列の連結を最適化し、代わりに組み込み関数を使用します。カスタム関数の代わりに組み込み関数を使用します。

Golang API のキャッシュ戦略と最適化 Golang API のキャッシュ戦略と最適化 May 07, 2024 pm 02:12 PM

GolangAPI のキャッシュ戦略により、パフォーマンスが向上し、サーバーの負荷が軽減されます。一般的に使用される戦略は、LRU、LFU、FIFO、TTL です。最適化手法には、適切なキャッシュ ストレージの選択、階層型キャッシュ、無効化管理、監視とチューニングが含まれます。実際には、データベースからユーザー情報を取得する API を最適化するために LRU キャッシュが使用されます。それ以外の場合は、データベースからデータを取得した後にキャッシュを更新できます。

erlang と golang ではどちらのパフォーマンスが優れていますか? erlang と golang ではどちらのパフォーマンスが優れていますか? Apr 21, 2024 am 03:24 AM

Erlang と Go にはパフォーマンスの違いがあります。 Erlang は同時実行性に優れていますが、Go はより高いスループットとより高速なネットワーク パフォーマンスを備えています。 Erlang は高い同時実行性を必要とするシステムに適しており、Go は高スループットと低遅延を必要とするシステムに適しています。

PHP 開発におけるキャッシュ メカニズムとアプリケーションの実践 PHP 開発におけるキャッシュ メカニズムとアプリケーションの実践 May 09, 2024 pm 01:30 PM

PHP 開発では、キャッシュ メカニズムにより、頻繁にアクセスされるデータがメモリまたはディスクに一時的に保存され、データベース アクセスの数が削減され、パフォーマンスが向上します。キャッシュの種類には主にメモリ、ファイル、データベース キャッシュが含まれます。キャッシュは、組み込み関数またはサードパーティのライブラリ (cache_get() や Memcache など) を使用して PHP に実装できます。一般的な実用的なアプリケーションには、データベース クエリ結果をキャッシュしてクエリ パフォーマンスを最適化したり、ページ出力をキャッシュしてレンダリングを高速化したりすることが含まれます。キャッシュ メカニズムにより、Web サイトの応答速度が効果的に向上し、ユーザー エクスペリエンスが向上し、サーバーの負荷が軽減されます。

PHP 配列のページネーションで Redis キャッシュを使用するにはどうすればよいですか? PHP 配列のページネーションで Redis キャッシュを使用するにはどうすればよいですか? May 01, 2024 am 10:48 AM

Redis キャッシュを使用すると、PHP 配列ページングのパフォーマンスを大幅に最適化できます。これは、次の手順で実現できます。 Redis クライアントをインストールします。 Redisサーバーに接続します。キャッシュ データを作成し、データの各ページをキー「page:{page_number}」を持つ Redis ハッシュに保存します。キャッシュからデータを取得し、大規模な配列での高コストの操作を回避します。

Win11 英語 21996 を簡体字中国語 22000 にアップグレードする方法_Win11 英語 21996 を簡体字中国語 22000 にアップグレードする方法 Win11 英語 21996 を簡体字中国語 22000 にアップグレードする方法_Win11 英語 21996 を簡体字中国語 22000 にアップグレードする方法 May 08, 2024 pm 05:10 PM

まず、システム言語を簡体字中国語表示に設定して再起動する必要があります。もちろん、以前に表示言語を簡体字中国語に変更したことがある場合は、この手順をスキップできます。次に、レジストリ regedit.exe の操作を開始し、左側のナビゲーション バーまたは上部のアドレス バーで HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNlsLanguage に直接移動し、InstallLanguage キーの値と Default キーの値を 0804 に変更します (英語に変更する場合)。まずシステムの表示言語を en-us に設定し、システムを再起動してから、すべてを 0409 に変更します) この時点でシステムを再起動する必要があります。

navicat は redis に接続できますか? navicat は redis に接続できますか? Apr 23, 2024 pm 05:12 PM

はい、Navicat は Redis に接続できます。これにより、ユーザーはキーの管理、値の表示、コマンドの実行、アクティビティの監視、問題の診断が可能になります。 Redis に接続するには、Navicat で「Redis」接続タイプを選択し、サーバーの詳細を入力します。

See all articles