Redis-データベース
5966 ワード
サーバ内のデータベース
データベースの切り替え
デフォルトでは、redisクライアントのターゲット・データベースは0番データベースであり、
クライアント状態
データベースキースペース
キースペースは、ユーザーが見ているデータベースと直接対応しています.キー空間のキー、すなわちデータベースのキーであり、各キーは文字列オブジェクトである. キー空間の値、すなわちデータベースの値であり、各値は、文字列オブジェクト、リストオブジェクト、ハッシュ表オブジェクト、集合オブジェクト、および整列集合オブジェクトを含む任意のRedisオブジェクトであってもよい.
新しいキーを追加
データベースに新しいキー値ペアを追加すると、実際にはキー空間辞書に新しいキー値ペアを追加します.
キーの削除
データベース内のキーを削除するのは、実際にはキー空間内のキーに対応するキー値対オブジェクトを削除することです.
その他のキースペース操作
読み書きキー空間時のメンテナンス操作キーが読み込まれた後(読み取り操作と書き込み操作の両方がキーを読み取ります)、サーバはキーが存在するかどうかに応じて、INFO stats命令の キーを読み込むと、サーバはキーのLRU(最後の使用)時間を更新します.この値はキーのアイドル時間の計算に使用できます.コマンドOBJECT idletimeコマンドを使用して、キー サーバが1つのキーを読み込んだときにキーが期限切れであることを発見した場合、サーバはこの期限切れのキーを削除してから、残りの他の操作を実行します. クライアントがWATCHコマンドを使用してキーを監視している場合、サーバは監視されているキーを変更した後、このキーをダーティとマークし、トランザクションにこのキーが変更されたことに気づかせる. サーバは、1つのキーを変更するたびに、サーバの永続化およびレプリケーション操作の実行をトリガする汚いキーカウンタの値を1つ増やします. サーバがデータベース通知機能をオンにすると、キーを変更した後、サーバは構成に従って対応するデータベース通知を送信します.
キーの生存時間または有効期限の設定
上の4つのコマンドは最後に
保存の有効期限
redisDb構造の期限切れ辞書のキーは、キー空間内のキーオブジェクトを指すポインタです. 期限切れ辞書の値は、ミリ秒精度のUNIXタイムスタンプ であるlong longタイプの整数です.
有効期限の削除
期限切れキーの判定
期限切れ辞書で、次の手順を確認します.キーが期限切れ辞書にあるか否かを判定し、存在する場合は期限切れ時間 を返す.は、現在のUNIXタイムスタンプがキーの有効期限よりも大きいか否かを判定し、もしそうであれば、キーの有効期限は である.
期限切れキー削除ポリシー
タイミング削除
キーの有効期限を設定しながら、キーの有効期限が来たときに、すぐにキーの削除操作を実行するタイマを作成します.メモリに友好的で、期限切れのキーが占有するメモリ をできるだけ早く解放する.はCPUに友好的ではない、特に期限切れキーが比較的多い場合 である.
不活性削除
キースペースからキーを取得するたびに、取得したキーが期限切れであるかをチェックし、期限切れであればそのキーを削除し、期限切れでなければそのキーを返します CPUに友好的な はメモリに友好的ではありません.特に期限切れのキーがたくさんありますが、アクセスしていない場合は です.
定期的に削除
一定時間ごとに、プログラムはデータベースをチェックし、中の期限切れキーを削除します.
最も重要なのは、削除操作の実行時間と実行頻度を合理的に設定することです.
Redisの期限切れキー削除ポリシー
不活性削除ポリシーの実装
期限切れキーの不活性削除ポリシーは
参考:Redis設計と実装
struct redisServer {
// ,
redisDb *db;
//
// database , 16
int dbnum;
};
データベースの切り替え
デフォルトでは、redisクライアントのターゲット・データベースは0番データベースであり、
SELECT
コマンドでデータベースを切り替えることができます.redis> SET msg "hello world"
OK
redis> GET msg
"hello world"
redis> SELECT 2
OK
redis[2]> GET msg
(nil)
クライアント状態
redisClient
構造のdb属性は、redisDb
構造を指すポインタであるクライアントの現在のターゲットデータベースを記録する.typedef struct redisClient {
//
redisDb *db;
} redisClient;
redisClient.db
ポインタを変更することにより、データベースの切り替え、すなわちSELECT
コマンドの実現が可能となるデータベースキースペース
redisDb
構造のdict辞書は、データベース内のすべてのキー値ペアを保存します.typedef struct redisDb {
dict *dict;
}
キースペースは、ユーザーが見ているデータベースと直接対応しています.
新しいキーを追加
データベースに新しいキー値ペアを追加すると、実際にはキー空間辞書に新しいキー値ペアを追加します.
キーの削除
データベース内のキーを削除するのは、実際にはキー空間内のキーに対応するキー値対オブジェクトを削除することです.
DEL key [...]
その他のキースペース操作
FLUSHDB
:データベース全体を空にするRANDOMKEY
:ランダムに1つのキーを返します.DBSIZE
:データベース・キーの数読み書きキー空間時のメンテナンス操作
keyspace_hits
プロパティとkeyspace_misses
プロパティで表示できるように、サーバのキー空間ヒット回数またはキー空間ヒット(miss)回数を更新します.key
のアイドル時間を表示できます.キーの生存時間または有効期限の設定
EXPIRE
:生存時間を設定し、単位:秒.EXPIRE
SET key value
//
EXPIRE key 5
PEXPIRE
:生存時間、単位:ミリ秒を設定します.PEXPIRE
EXPIREAT
:有効期限を設定し、単位秒(タイムスタンプ)EXPIREAT
PEXPIREAT
:ミリ秒単位で有効期限を設定します.PEXPIREAT
上の4つのコマンドは最後に
PEXPIREAT
コマンドを使用して実現されます.TTL
:生存時間のあるキーを受け入れ、このキーの残りの生存時間を返すPTTL
:有効期限のあるキーを受け入れ、このキーの残りの生存時間を返します.保存の有効期限
redisDb構造の
expires
辞書は、データベース内のすべてのキーの有効期限を保存します.typedef struct redisDb {
// ,
dict *expires;
} redisDb;
有効期限の削除
PERSIST
期限切れキーの判定
期限切れ辞書で、次の手順を確認します.
期限切れキー削除ポリシー
タイミング削除
キーの有効期限を設定しながら、キーの有効期限が来たときに、すぐにキーの削除操作を実行するタイマを作成します.
不活性削除
キースペースからキーを取得するたびに、取得したキーが期限切れであるかをチェックし、期限切れであればそのキーを削除し、期限切れでなければそのキーを返します
定期的に削除
一定時間ごとに、プログラムはデータベースをチェックし、中の期限切れキーを削除します.
最も重要なのは、削除操作の実行時間と実行頻度を合理的に設定することです.
Redisの期限切れキー削除ポリシー
不活性削除ポリシーの実装
期限切れキーの不活性削除ポリシーは
db.c/expireIfNeeded
関数によって実現され、すべての読み書きデータベースのRedisコマンドは実行前にこの関数を呼び出して入力キーをチェックします.参考:Redis設計と実装