Redis の一般的なデータ型と使用シナリオ

ac8147d8309d49578329c254777efc24.jpgRedis は現在、次の 5 つのデータ型をサポートしています。

 

 

文字列(文字列)

リスト(リスト)

ハッシュ (辞書)

セット(コレクション)

ソートセット (順序付けされたコレクション)

以下に5つのデータタイプとそれに対応する動作コマンドを示します。

 

1.ストリング(紐)

文字列は単純なキーと値のキーと値のペアであり、値には文字列だけでなく数値も使用できます。文字列はデフォルトでredisObjectから参照される文字列としてredisに保存されますが、incr、decrなどの演算があった場合は数値に変換されて計算されます、このときredisObjectのエンコーディングフィールドはintです。

 

文字列はデフォルトでredisObjectから参照される文字列としてredisに保存されますが、incr、decrなどの演算があった場合は数値に変換されて計算されます、このときredisObjectのエンコーディングフィールドはintです。

 

アプリケーションシナリオ

最も一般的に使用されるデータ型は String であり、通常の Key/Value ストレージはこのカテゴリに分類できるため、ここでは説明しません。

 

関連コマンド

SET キー値 set key=value

GET キーまたはキー key に対応する値

GETRANGE key start end キーに格納されている文字列の部分文字列を取得します

GETSET キー値 キーの文字列値を設定し、古い値を返します。

GETBIT キー オフセット キー値に格納されている文字列値のオフセットを返します。

MGET key1 [key2..] 指定されたキーのすべての値を取得します

SETBIT キー オフセット値 キーに格納されている文字列値のオフセットのビットをセットまたはクリアします

SETEX キー秒値 キーの有効期限が切れたときの設定値

SETNX キー値 キーが存在しない場合にのみ、キーの値を設定します。

SETRANGE キー オフセット値 指定されたキーからの文字列の一部のオフセットを上書きします

STRLEN キー キーに格納されている値の長さを取得します

MSET キー値 [キー値...] 複数のキーと複数の値を設定します

MSETNX キー値 [キー値...] キーが存在しない場合にのみ、複数のキーの複数の値を設定します

PSETEX キーのミリ秒値は、キーのミリ秒値と有効期限を設定します。

INCR キー キーの整数値を 1 回インクリメントします

INCRBY キーのインクリメント キーの整数値を指定された量だけインクリメントします

INCRBYFLOAT キーのインクリメント キーの浮動小数点値を指定された量だけインクリメントします

DECR キー キーの整数値を 1 回デクリメントします

DECRBY キーのデクリメント キーの整数値を指定された数値だけデクリメントします。

APPEND キー値 キーに値を追加します

このうち、管理キーの操作に使用するコマンドは次のとおりです。

 

DEL キー 存在する場合は削除キー

DUMP キーは、指定されたキーに格納されている値のシリアル化されたバージョンを返します。

EXISTS key このコマンドはキーが存在するかどうかを確認します。

EXPIRE キーの秒数はキーの有効期限を指定します

EXPIREAT キーのタイムスタンプは、キーの有効期限を指定します。ここで、時刻は Unix タイムスタンプ形式です。

PEXPIRE キー ミリ秒 ミリ秒単位でキーの有効期限が切れるように設定します。

PEXPIREAT key milliseconds-timestamp Unix タイムスタンプで指定されたミリ秒単位でキーの有効期限が切れるように設定します。

KEYS パターンは、指定されたパターンに一致するすべてのキーを検索します

MOVE key db キーを別のデータベースに移動します

PERSIST キーは期限切れのキーを削除します

PTTL キー キーの有効期限が切れるまでの残り時間をミリ秒単位で取得します。

TTL キー キーの有効期限が切れるまでの残り時間を取得します。

RANDOMKEY は Redis からランダムなキーを返します

RENAME key newkey キーの名前を変更します。

RENAMENX key newkey 新しいキーが存在しない場合はキーの名前を変更します

TYPE キーは、キーに格納されているデータ型の値を返します。

使用例

redis 127.0.0.1:6379> baidu を設定 http://www.baidu

OK

redis 127.0.0.1:6379> baidu .com を追加

(整数) 20

redis 127.0.0.1:6379> baidu を入手

「http://www.baidu.com」

redis 127.0.0.1:6379> 訪問者 0 を設定

OK

redis 127.0.0.1:6379> 訪問者増加

(整数) 1

redis 127.0.0.1:6379> 訪問者増加

(整数) 2

redis 127.0.0.1:6379> 訪問者を取得

「2」

redis 127.0.0.1:6379> 訪問者数 100 人増加

(整数) 102

redis 127.0.0.1:6379> 訪問者を取得

「102」

redis 127.0.0.1:6379> タイプbaidu

redis 127.0.0.1:6379> 訪問者を入力

redis 127.0.0.1:6379> ttl baidu

(整数) -1

redis 127.0.0.1:6379> baidu baidu-site の名前を変更

OK

redis 127.0.0.1:6379> baidu を入手

(なし)

redis 127.0.0.1:6379> 百度サイトを取得

「http://www.baidu.com」

2.リスト(リスト)

Redis リストは文字列の単純なリストであり、C++ の std::list と比較できます。簡単に言えば、リンクされたリストまたはキューです。要素は Redis リストの先頭または末尾から追加できます。リストの最大長は 2^32 - 1 です。つまり、各リストは 40 億を超える要素をサポートします。

 

Redis リストの実装は二重リンク リストであり、逆方向の検索とトラバーサルをサポートでき、操作がより便利ですが、追加のメモリ オーバーヘッドが発生します。送信バッファ キューを含む Redis の多くの内部実装でも、このデータ構造が使用されます。 。

 

アプリケーションシナリオ

Redis リストの応用シナリオは数多くあり、Redis の最も重要なデータ構造の 1 つでもあります。たとえば、twitter のフォロー リストやファン リストは Redis リスト構造で実装できます。たとえば、一部のアプリケーションは Redis リスト タイプを使用して、シンプルなライトウェイト メッセージ キュー、プロデューサー プッシュ、コンシューマー ポップ/bポップを実装します。

 

関連コマンド

BLPOP

BLPOP key1 [key2 ] タイムアウト フェッチしてリストの最初の要素を取得するか、要素が使用可能になるまでブロックします

BRPOP

BRPOP key1 [key2 ] タイムアウト フェッチしてリストの最後の要素を取得するか、取得できる要素が取得されるまでブロックします

ブロポッププッシュ

BRPOPLPUSH ソース宛先タイムアウトは、リストから値をポップし、それを別のリストにプッシュして返します。または、値が使用可能になるまでブロックします。

リンデックス

LINDEX キーインデックス リストのインデックスから対応する要素を取得します

レンズ付き

LINSERT キー BEFORE|AFTER ピボット値は、リスト内の他の要素の前後に要素を挿入します。

カーテン

LLEN キー リストの長さを取得します

LPOP

LPOP キー リストの最初の要素を取得して取り出す

LPUSH

LPUSH キー value1 [value2] 1 つ以上の値のリストを先頭に追加します

LPUSHX

LPUSHX キー値は、リストに存在する場合にのみ、値のリストの先頭に追加されます。

ラレンジ

LRANGE キー スタート ストップ リストからさまざまな要素を取得します

エルレム

LREM キー カウント値によりリストから要素が削除されます

LSET

LSET キー インデックス値 要素の値を設定するためのリスト内のインデックス

LTRIM

LTRIM キー start stop リストを指定範囲にトリミングします

RPOP

RPOP キーを出してリストの最後の要素を取得します

ロポッププッシュ

RPOPLPUSH ソース宛先は、リストの最後の要素を削除し、それを別のリストに追加して返します。

Rプッシュ

RPUSH キー value1 [value2] 1 つ以上の値をリストに追加します

RPUSHX

RPUSHX キー値 リストが存在する場合のみ、値リストを追加します。

使用例

redis 127.0.0.1:6379> lpush list1 redis

(整数) 1

redis 127.0.0.1:6379> lpush list1 こんにちは

(整数) 2

redis 127.0.0.1:6379> rpush list1 ワールド

(整数) 3

redis 127.0.0.1:6379> レンリスト1

(整数) 3

redis 127.0.0.1:6379> lrange list1 0 3

1) 「こんにちは」

2) 「リディス」

3) 「世界」

redis 127.0.0.1:6379> lpop list1

"こんにちは"

redis 127.0.0.1:6379> rpop list1

"世界"

redis 127.0.0.1:6379> lrange list1 0 3

1) 「リディス」

3. ハッシュ(辞書、ハッシュテーブル)

C# の dict 型または C++ の hash_map 型に似ています。

 

Redis ハッシュは、実際には Value に対応する HashMap です。実際、ここには 2 つの異なる実装があります。このハッシュのメンバーが比較的小さい場合、Redis はメモリを節約するために、コンパクトなストレージに 1 次元配列のようなメソッドを使用します。実際の HashMap 構造を使用するのではなく、対応する値 redisObject のエンコーディングは zipmap です。メンバーの数が増えると自動的に実際の HashMap に変換されます。このときのエンコーディングは ht です。

 

アプリケーションシナリオ

複数のユーザーとそれに対応するユーザー情報が存在することを想定し、ユーザーIDをキーとして格納し、ユーザー情報を値としてjson形式などにシリアル化して格納するといった使い方が可能です。

 

関連コマンド

HDEL

HDEL キー フィールド[フィールド...] オブジェクトの 1 つまたは複数の属性フィールドを削除します。存在しない属性は無視されます。

異端者

HEXISTS キーフィールド フィールドにオブジェクトが存在するかどうかを確認します

HGET

HGET キーフィールド オブジェクト内のフィールド属性フィールドの値を取得します

ヘゲタール

HGETALLキー オブジェクトのすべての属性フィールドと値を取得します

ヒンクラビー

HINCRBY キー フィールド値 オブジェクト内の指定されたフィールドの値を指定された値だけ増加させます。アトミックな自動インクリメント操作。整数の属性値のみを使用できます。

HINCRBYFLOAT

HINCRBYFLOAT キー フィールドの増分 オブジェクト内の指定されたフィールドの値を、指定された浮動小数点数だけ増加させます。

HKEYS

HKEYS キー オブジェクトのすべての属性フィールドを取得します

くじら

HVALSキー オブジェクトの全属性値を取得

ヘレン

HLEN キー オブジェクトのすべての属性フィールドの合計数を取得します

HMGET

HMGET key field[field...] オブジェクトの 1 つ以上の指定されたフィールドの値を取得します

HSET

HSET キーフィールド値 オブジェクトの指定されたフィールドの値を設定します

HMSET

HMSET キー フィールド値 [フィールド値 ...] オブジェクト内の 1 つ以上のフィールドの値を同時に設定します。

HSETNX

HSETNX キー フィールド値は、指定されたフィールドがオブジェクトに存在しない場合にのみフィールドの値を設定します。

ヒストレン

HSTRLEN キー フィールド オブジェクトの指定されたフィールドの値の文字列長を返します。オブジェクトまたはフィールドが存在しない場合は、0 を返します。

HSスキャン

HSCAN キーカーソル [MATCH パターン] [COUNT カウント] SCAN コマンドと同様

使用例

127.0.0.1:637

おすすめ

転載: blog.csdn.net/weixin_57763462/article/details/131906817