ホームページ システムチュートリアル Linux Redisの内部動作メカニズムの詳細な説明

Redisの内部動作メカニズムの詳細な説明

Mar 10, 2024 am 09:13 AM
linux Linuxチュートリアル レッドハット Linuxシステム Linuxコマンド キーと値のペア Linux 認定 レッドハットリナックス Linuxビデオ

Redisの内部動作メカニズムの詳細な説明

Redis データベース(Redis がデータベースを表す方法とデータベース操作がどのように実装されるか)

Redisサーバーを初期化すると、redis.h/REDIS_DEFAULT_DBNUM(以下Nと略します)のデータベースが作成され、データベースIDは0からN-1までとなり、すべてのデータベースがredis.h/redisServerに保存されます。データベース配列。

クライアント側では、「SELECT」コマンドを使用して切り替えることができます。この場合、プログラムは切り替えに redis.h/redisServer.db[number] を直接使用します。ただし、AOF プログラム、レプリケーション プログラム、RDB プログラムなどの一部の内部プログラムでは、現在のデータベースの番号を知る必要があります。id フィールドがない場合、プログラムは現在使用されているデータベースと redisServer 内のすべてのデータベースのみを指すことができます。 .db 配列。ポインタを比較して、使用しているデータベースを特定します。

Redis データベース構造:
リーリー
追加、削除、変更、クエリなどの Redis データベース操作のキー スペース操作:
###新しい:### Redis は、キーと値のペアをキー空間ディクショナリに追加します。キーは文字列で、値は任意の値タイプです。

消去:### Redis は、キー空間辞書内の対応するキーのキーと値のペアを削除します
更新:
Redis は、キー空間ディクショナリ内の前のキーに対応する値オブジェクトを解放し、キーが新しい値オブジェクトを指すようにします
お問い合わせ:
Redis は、キー空間辞書内の対応するキーの値オブジェクトをクエリします:
キーが存在しません。NULL
を返します キーが存在し、正しいタイプであり、正しい値を返します
キーは存在しますが、型が正しくありません。戻り値の型が間違っています
その他の操作:​​
上記のキー値操作に加えて、データベース自体に対する多くのコマンドがあり、これらもキー スペースを処理することによって完了します。 FLUSHDB キースペース内のすべてのキーと値のペアを削除します
RANDOMKEY キー空間からランダムなキーを返します
DBSIZE キー空間内のキーと値のペアの数を返します
Exists は、指定されたキーがキー空間に存在するかどうかを確認します
RENAME キースペースで、指定されたキーの名前を変更します



キーの有効期限

Redis データベースでは、すべてのキーの有効期限は RedisDb 構造の Expires ディクショナリに保存されます。キーは dict ディクショナリ (キー空間) 内のキーへのポインタであり、値は変更された有効期限です.long long 型表現を使用します。 Redis には、キーの生存時間 (どのくらいの期間存続できるか) と有効期限 (期限切れになるとき) を設定する 4 つのコマンドがあります。 EXPIRE はキーの有効期間を秒単位で設定します;
PEXPIRE はキーの有効期間をミリ秒単位で設定します;

EXPIREAT はキーの有効期限 UNIX タイムスタンプを秒単位で設定します;

PEXPIREAT キーの有効期限の UNIX タイムスタンプをミリ秒単位で設定します。


設定方法には非常に多くの異なる単位と異なる形式がありますが、expires ディクショナリの値は、「ミリ秒単位の期限切れの UNIX タイムスタンプ」を保存するだけです。つまり、変換を通じて、すべてのコマンドの効果が最終的に反映されます。効果は PEXPIREAT コマンドと同じです。


期限切れのキーのクリア

定时清除:
在创建KEY的时候创建一个定时任务,在KEY到期时定时任务会被触发,第一时间清除过期KEY。
此种操作对内存最友好,不会有垃圾数据占用内存情况存在
缺点是会造成很大的服务器负载,特别是CPU负载高的时候,CPU很大一部分负载用在了删除不必要的KEY上了

惰性清除:
放任键空间的键不管,每次查询KEY的时候先去校验KEY是否过期,过期则删除,不过期则正常返回相应的VALUE。
此种操作对CPU最友好,这种策略仅限于当前KEY,相关不必要的KEY不会造成CPU负载
缺点是:容易造成内存空间浪费,特别是当系统中存在大量过期KEY且很少被用到,这十分影响非常依赖于内存大小Redis的性能

定期删除:
由定时脚本cron定时对expires的键扫描判断是否有过期的KEY存在,如存在,将其删除掉。
这是一种折中方案,既不会过多消耗CPU,又可以定时清楚惰性删除忽略到的不必要的内存消耗

Redis采用的“惰性清除”和“定期清楚”相结合的方式,其中定期删除模式是在规定的时间限制内,尽 可能地遍历各个数据库的 expires 字典,随机地检查一部分键的过期时间,并删除其中的过期键。

伪代码如下:

def activeExpireCycle():
# 遍历数据库(不一定能全部都遍历完,看时间是否足够)
for db in server.db:
# MAX_KEY_PER_DB 是一个 DB 最大能处理的 key 个数 # 它保证时间不会全部用在个别的 DB 上(避免饥饿) i=0                                    while (i 
<p>Redis 过期键删除的主从同步问题(Redis的机制是由主节点统一控制)</p>
<p>如果服务器是主节点,当它删除一个过期键之后,会显式的向所有附属节点发送一条DEL命令<br>
如果服务器是附属节点,当它判断到当前KEY已经过期,会将该键过期的消息发送给主服务器,主服务器删除后向所有的从服务器节点发送DEL命令。</p>
<p>从服务器节点不自主的对键进行删除是为了保持和主服务器数据的绝对一致性,即当一个过期键还存在主服务器上,这个键在所有的从服务器上也不会被删除。</p>
ログイン後にコピー

以上が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衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

VSCODEに必要なコンピューター構成 VSCODEに必要なコンピューター構成 Apr 15, 2025 pm 09:48 PM

VSコードシステムの要件:オペレーティングシステム:オペレーティングシステム:Windows 10以降、MACOS 10.12以上、Linux Distributionプロセッサ:最小1.6 GHz、推奨2.0 GHz以上のメモリ:最小512 MB、推奨4 GB以上のストレージスペース:最低250 MB以上:その他の要件を推奨:安定ネットワーク接続、XORG/WAYLAND(Linux)

Apr 16, 2025 pm 07:39 PM

NotePadはJavaコードを直接実行することはできませんが、他のツールを使用することで実現できます。コマンドラインコンパイラ(Javac)を使用してByteCodeファイル(filename.class)を生成します。 Javaインタープリター(Java)を使用して、バイトコードを解釈し、コードを実行し、結果を出力します。

メモ帳でJSONをフォーマットする方法 メモ帳でJSONをフォーマットする方法 Apr 16, 2025 pm 07:48 PM

JSON Viewerプラグインを使用して、JSONファイルを簡単にフォーマットしてJSONファイルを開きます。 JSON Viewerプラグインをインストールして有効にします。 「プラグイン」に移動します。 「Json Viewer」&gt; 「フォーマットJSON」。インデント、分岐、並べ替え設定をカスタマイズします。フォーマットを適用して、読みやすさと理解を改善し、JSONデータの処理と編集を簡素化します。

vscodeの使用方法 vscodeの使用方法 Apr 15, 2025 pm 11:21 PM

Visual Studio Code(VSCODE)は、Microsoftが開発したクロスプラットフォーム、オープンソース、および無料のコードエディターです。軽量、スケーラビリティ、および幅広いプログラミング言語のサポートで知られています。 VSCODEをインストールするには、公式Webサイトにアクセスして、インストーラーをダウンロードして実行してください。 VSCODEを使用する場合、新しいプロジェクトを作成し、コードを編集し、コードをデバッグし、プロジェクトをナビゲートし、VSCODEを展開し、設定を管理できます。 VSCODEは、Windows、MacOS、Linuxで利用でき、複数のプログラミング言語をサポートし、マーケットプレイスを通じてさまざまな拡張機能を提供します。その利点には、軽量、スケーラビリティ、広範な言語サポート、豊富な機能とバージョンが含まれます

Linuxの主な目的は何ですか? Linuxの主な目的は何ですか? Apr 16, 2025 am 12:19 AM

Linuxの主な用途には、1。Serverオペレーティングシステム、2。EmbeddedSystem、3。Desktopオペレーティングシステム、4。開発およびテスト環境。 Linuxはこれらの分野で優れており、安定性、セキュリティ、効率的な開発ツールを提供します。

GITの倉庫アドレスを確認する方法 GITの倉庫アドレスを確認する方法 Apr 17, 2025 pm 01:54 PM

gitリポジトリアドレスを表示するには、次の手順を実行します。1。コマンドラインを開き、リポジトリディレクトリに移動します。 2。「git remote -v」コマンドを実行します。 3.出力と対応するアドレスでリポジトリ名を表示します。

Linuxアーキテクチャ:5つの基本コンポーネントを発表します Linuxアーキテクチャ:5つの基本コンポーネントを発表します Apr 20, 2025 am 12:04 AM

Linuxシステムの5つの基本コンポーネントは次のとおりです。1。Kernel、2。Systemライブラリ、3。Systemユーティリティ、4。グラフィカルユーザーインターフェイス、5。アプリケーション。カーネルはハードウェアリソースを管理し、システムライブラリは事前コンパイルされた機能を提供し、システムユーティリティはシステム管理に使用され、GUIは視覚的な相互作用を提供し、アプリケーションはこれらのコンポーネントを使用して機能を実装します。

vscode端子使用チュートリアル vscode端子使用チュートリアル Apr 15, 2025 pm 10:09 PM

VSCODEビルトインターミナルは、エディター内でコマンドとスクリプトを実行して開発プロセスを簡素化できるようにする開発ツールです。 VSCODE端子の使用方法:ショートカットキー(CTRL/CMD)で端子を開きます。コマンドを入力するか、スクリプトを実行します。 Hotkeys(Ctrl Lなどの端子をクリアするなど)を使用します。作業ディレクトリ(CDコマンドなど)を変更します。高度な機能には、デバッグモード、自動コードスニペット完了、およびインタラクティブコマンド履歴が含まれます。

See all articles