目次
摘要
redisObject
类型与编码介绍
String
ホームページ データベース Redis Redis の種類とエンコーディングの原則と使用法は何ですか?

Redis の種類とエンコーディングの原則と使用法は何ですか?

May 29, 2023 pm 04:21 PM
redis type encoding

    摘要

    Redis是一款开源的高性能key-value数据库,广泛应用于各种场景。在Redis中,数据类型(type)和编码(encoding) 是非常重要的概念。本篇博客将详细介绍Redis支持的数据类型以及相应的编码方式和底层实现原理。

    要查看Redis某个key的内部编码,可以使用Redis命令OBJECT ENCODING key。其中,key是你想要查询的键名。例如,如果你想要查询名为mykey的键的内部编码,可以执行以下命令:

    1

    127.0.0.1:6379> object encoding mykey  // 查看某个Redis键值的编码

    ログイン後にコピー

    redisObject

    在 Redis 中,redisObject 是 Redis 中最基本的数据结构之一。redisObject 用于表示 Redis 中的键值对中的值,它可以是字符串、整数、列表、哈希表等任意一种 Redis 数据类型。

    redisObject 的定义如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    typedef struct redisObject {

     

        // 类型

        unsigned type:4;

     

        // 编码方式

        unsigned encoding:4;

     

        // 引用计数

        int refcount;

     

        // 指向实际值的指针

        void *ptr;

     

    } robj;

    ログイン後にコピー
    • type:表示 redisObject 的类型。

    • encoding:表示 redisObject 的编码方式。

    • refcount:表示当前 redisObject 被引用的次数。

    • ptr: ptr字段则是一个指针,指向实际的 Redis 对象。

    Redis源码encoding取值有如下几种:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    #define OBJ_ENCODING_RAW 0        /* Raw representation */

    #define OBJ_ENCODING_INT 1        /* Encoded as integer */

    #define OBJ_ENCODING_HT 2         /* Encoded as hash table */

    #define OBJ_ENCODING_ZIPMAP 3     /* Encoded as zipmap */

    #define OBJ_ENCODING_LINKEDLIST 4 /* No longer used: old list encoding. */

    #define OBJ_ENCODING_ZIPLIST 5    /* Encoded as ziplist */

    #define OBJ_ENCODING_INTSET 6     /* Encoded as intset */

    #define OBJ_ENCODING_SKIPLIST 7   /* Encoded as skiplist */

    #define OBJ_ENCODING_EMBSTR 8     /* Embedded sds string encoding */

    #define OBJ_ENCODING_QUICKLIST 9  /* Encoded as linked list of ziplists */

    ログイン後にコピー

    类型与编码介绍

    Redis支持五种主要的数据类型:字符串(string)、列表(list)、集合(set)、有序集合(sorted set)和哈希(hash)。每种数据类型都有对应的编码方式。

    数据类型与编码方式总览如下:

    数据类型 编码方式
    字符串 int、embstr、raw
    哈希表 ziplist、hashtable
    列表 ziplist、linkedlist、quicklist
    集合 intset、hashtable
    有序集合 ziplist、skiplist

    String

    String は Redis の最も基本的なデータ型で、通常はテキストまたはバイナリ データを保存するために使用されます。 Redis は 2 つのエンコード方式をサポートしています。

    • Redis では、文字列が整数として表現できる場合、文字列は整数に変換され、int エンコードを使用して保存されます。 int エンコードの利点は、ストレージ容量が小さく、操作効率が高いことです。欠点は、整数のみを保存でき、文字列操作をサポートしていないことです。

    • embstr(embstr-encoded string): 44 バイト未満の長さの文字列を保存します。文字列が比較的短い場合は、このエンコード方法を使用して保存します。メモリ使用量を削減します。

    • raw(生エンコードされた文字列):

      44 バイトを超える文字列を保存する. 文字列が比較的長い場合、このエンコード方法を使用して文字列が保存されます。

    リスト

    リストは、要素を追加、変更、削除できる順序付けされた文字列のコレクションです。 Redis は 3 つのエンコード方式をサポートしています:

    • ziplist: Redis3.2 バージョンより前、

      List 内の各文字列の長さが 64 バイト未満であり、リスト内の文字列の長さが 64 バイト未満の場合要素数が 512 未満の場合、List オブジェクトは ziplist エンコードを使用し、それ以外の場合はリンクリスト エンコードが使用されます。 ziplist は、メモリを節約するコンパクトな圧縮リスト構造です。小さなリストに適しています。

    • Linkedlist は、リンク リスト構造を通じてあらゆるサイズのリストをサポートするデータ構造の一種です。ただし、リストの長さが増加するにつれて、そのメモリ使用量も増加します。

    • クイックリスト:

      Redis 3.2 バージョン で導入されたクイックリストは、複数のジップリストで構成されるリスト構造であり、パフォーマンスを確保するだけでなく、メモリも節約できます。大規模なリストに適しています。

    コレクション

    コレクションは、要素の追加、削除、クエリをサポートする一連の順序なしの文字列コレクションです。 Redis は 2 つのエンコード方式をサポートしています:

    • intset:

      コレクション内の要素がすべて整数の場合、Redis は intset エンコードを使用して を格納します。 intset エンコーディングの利点は、ストレージ容量が小さく、操作効率が高いことです。

    • ハッシュテーブル:

      コレクション内の要素に文字列が含まれている場合、Redis はハッシュテーブル エンコーディングを使用して を保存します。ハッシュテーブル エンコーディングの利点は、あらゆるタイプの要素を格納でき、文字列操作をサポートしていることです。欠点は、保管スペースが比較的大きく、作業効率が比較的低いことです。

    順序付きセット

    順序なしの文字列コレクションにはスコアが割り当てられるため、スコアに従って並べ替えて順序付きセットを形成できます。 Redis は 2 つのエンコード方法をサポートしています:

    • ziplist:

      保存する要素は 128 未満で、すべての要素のサイズは 64 バイト未満です。ziplist エンコードを使用します。、ziplist は順序付けられた小規模なコレクションに適した、コンパクトな圧縮リスト構造。

    • skiplist: Skiplist は、高速なクエリと並べ替えをサポートするスキップ リスト構造です。大規模な注文コレクションに適しています。

    ハッシュ テーブル

    ハッシュ テーブルは、各キーが値に関連付けられたキーと値のペアのコレクションです。 Redis は 2 つのエンコード方式をサポートしています:

    • ziplist:

      ハッシュ オブジェクトに格納されるすべてのキー値の文字列長は 64 バイト未満であり、キーと値のペアの数はが 512 未満の場合、Redis は ziplist エンコーディングを使用して保存します。ジップリスト エンコード方式の利点は、保存スペースが小さく、操作効率が高いことです。欠点は、高速キー検索操作がサポートされていないことです。

    • 上記の条件に加えて、Redis はハッシュ テーブル エンコーディングを使用して保存します。ハッシュテーブル エンコーディングの利点は、高速なキー検索操作をサポートしていることです。欠点は、保管スペースが比較的大きく、作業効率が比較的低いことです。

    型とエンコードの基本原則

    Redis でサポートされるデータ型とエンコード方法を理解した後、それらの基本的な実装原則を見てみましょう。

    エンコーディング変換

    Redis では、各キーと値のペアには型識別子があり、キーと値のペアに格納されているデータ型を示すために使用されます。キーを操作するとき、Redis はキーの現在のエンコーディングと操作に必要なエンコーディングに基づいてキーと値のペアをエンコードします。

    たとえば、文字列にコンテンツを追加するとき、文字列の現在のエンコード方式が raw であるが、新しいコンテンツを embstr エンコードを使用して保存できる場合、Redis は文字列をエンコードします。メソッドは次から変換されます。 raw から embstr まで。

    データ構造

    Redis は、エンコード方法に限定されるものではなく、さまざまな従来のデータ構造を使用してさまざまなデータ型を実装します。たとえば、Redis リストとハッシュ テーブルは、リンク リスト構造を使用して実装されます。スキップ リストは、順序付けされたコレクションで使用される効率的なデータ構造です。

    これらのデータ構造は、さまざまなシナリオでのアプリケーションのニーズを満たすために慎重に設計され、最適化されています。たとえば、リンク リスト構造は要素を頻繁に追加および削除する必要がある状況に適していますが、スキップ リスト構造は並べ替えや検索操作に適しています。

    以上がRedis の種類とエンコーディングの原則と使用法は何ですか?の詳細内容です。詳細については、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 を押す

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

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

    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 に変更します) この時点でシステムを再起動する必要があります。

    Win11でダウンロードしたアップデートファイルの探し方_Win11でダウンロードしたアップデートファイルの場所を共有する Win11でダウンロードしたアップデートファイルの探し方_Win11でダウンロードしたアップデートファイルの場所を共有する May 08, 2024 am 10:34 AM

    1. まず、デスクトップ上の[このPC]アイコンをダブルクリックして開きます。 2. 次に、マウスの左ボタンをダブルクリックして [C ドライブ] に入ります。システム ファイルは通常、自動的に C ドライブに保存されます。 3. 次に、C ドライブで [windows] フォルダーを見つけ、ダブルクリックしてに入ります。 4. [windows]フォルダーに入ったら、[SoftwareDistribution]フォルダーを見つけます。 5. 入力後、win11 のダウンロード ファイルとアップデート ファイルがすべて含まれている [ダウンロード] フォルダーを見つけます。 6. これらのファイルを削除したい場合は、このフォルダー内で直接削除してください。

    PHP Redis キャッシュ アプリケーションとベスト プラクティス PHP Redis キャッシュ アプリケーションとベスト プラクティス May 04, 2024 am 08:33 AM

    Redis は、高性能のキー/値キャッシュです。 PHPRedis 拡張機能は、Redis サーバーと対話するための API を提供します。 Redis に接続し、データを保存および取得するには、次の手順を使用します。 接続: Redis クラスを使用してサーバーに接続します。ストレージ: set メソッドを使用してキーと値のペアを設定します。取得: get メソッドを使用してキーの値を取得します。

    さまざまな PHP バージョンで関数のパフォーマンスを最適化するにはどうすればよいですか? さまざまな PHP バージョンで関数のパフォーマンスを最適化するにはどうすればよいですか? Apr 25, 2024 pm 03:03 PM

    さまざまな PHP バージョンで関数のパフォーマンスを最適化する方法には、分析ツールを使用して関数のボトルネックを特定すること、オペコード キャッシュを有効にするか外部キャッシュ システムを使用すること、型アノテーションを追加してパフォーマンスを向上させること、および PHP バージョンに応じて適切な文字列連結およびソート アルゴリズムを選択することなどが含まれます。

    See all articles