ホームページ  >  記事  >  データベース  >  Redis の一般的なデータ型の操作手順の概要

Redis の一般的なデータ型の操作手順の概要

coldplay.xixi
coldplay.xixi転載
2021-02-19 09:45:081800ブラウズ

Redis の一般的なデータ型の操作手順の概要

推奨 (無料): redis チュートリアル

Redis コマンドは、redis 上で操作を実行するために使用されます。サービス 。 Redis サービスでコマンドを実行するには、redis
クライアントが必要です。 redis-cli コマンドを使用して Redis クライアントを起動できます。完全な起動コマンドは redis-cli -h host -p port -a passwd です。

Redis には 5 つの一般的に使用されるデータ型があります: stringhashlistsetおよび zset (ソートされたセット順序付きセット)。これらのタイプを学習する前に、一般的なコマンド キーの管理を学習する必要があります。これらのタイプについては、以下で詳しく紹介します。 API の詳細については、ここを参照してください。

一般的なコマンド キー管理

主要なアプリケーション シナリオ:

  • 期間限定のプロモーション情報。
  • Web サイトのデータ キャッシュ (スコア ランキングなど、定期的に更新する必要がある一部のデータ用)
  • モバイル確認コード
  • Web サイト訪問者のアクセス頻度を制限する (例: 1 分間に最大 10 回のアクセス)

キーの名前付けの提案:
キー名は大文字と小文字が区別されます。キーは長すぎてはならず、長さを超えないようにしてください。 1024 バイト、長すぎると検索効率が低下します。プロジェクト内のキーには、user:id:password

などの統一された名前付けパターンを使用することをお勧めします。 ##keys pattern 指定されたパターンを満たすすべてのキーを返します。keys abc* は abc で始まるキーを表します
exists key を決定します。キーが存在するかどうか、存在する場合は 1 を返し、存在しない場合は 0 を返します
expire key Second キーのアクティビティ時間を設定します (秒)
pexpire key ミリ秒 キーのアクティビティ時間の設定 (ミリ秒)
del key キーの削除 key
ttl key キーの残り時間を返します。存在しない場合は -2 を返し、キーは存在するが残りの生存時間が設定されていない場合は -1 を返します
persist key Cancel Expiration time
select dbindex デフォルトでは16以上、インデックスは0
move key、dbindexから始まりますure in you in dbindex 現在のデータベースのキーを dbindex データベースに移動
randomkey off off off back. info
データベース情報の表示config get **
受信したリクエストをリアルタイムで保存し、関連する設定を返しますtype(key)
Return value type
flushdb > すべてのデータベースのすべてのキーを削除します
1. String String

String は最も基本的なタイプの Redis であり、キーは最大 523 MB を保存できます。 String 型はバイナリ セーフです。これは、redis の文字列には任意のデータを含めることができることを意味します。写真やシリアル化されたオブジェクトなど。
文字列アプリケーションのシナリオ:

文字列は通常、単一の文字列または JSON 文字列データを保存するために使用されます。

String はバイナリ セーフであるため、画像ファイルの内容を文字列として保存できます。

カウンター (通常のキーと値のキャッシュ アプリケーション、ファンの数、Weibo の数、投票など)

INCR およびその他の命令自体はアトミックの特性を持っていますRedis の NCR、INCRBY、DECR、DECRBY およびその他の命令を使用して、アトミック カウントの効果を実現できます。特定のシナリオで、3 つのクライアントが minum の値 (値は 2) を同時に読み取り、同時にそれに 1 を加算した場合、bynum の最終値は 5 になる必要があります。多くの Web サイトは、ビジネス統計カウントのニーズを達成するために、この赤の機能を使用しています。

  • #割り当て構文
  • set key value
  • キーに値を割り当てます。複数の設定を行うと古い値が上書きされ、型は無視されます
setnx key value
キーが既に存在する場合は設定されずに0が返され、それ以外の場合は設定されて1が返されます。これは分散ロックに対するソリューションの 1 つです。

setex key time value
キーに値を代入し、有効期限を設定します。有効期限が切れると、キーと値の両方がクリアされます。

setrange key start end 指定された間隔内の値を設定します。添字は 0 から始まり、文字列を置き換えます。
値の構文
<p><code>get key 指定したキーの値を取得します キーが存在しない場合は nil を返します
getrange key start end の値の部分文字列を取得します指定されたキー (開始および終了サブスクリプトを含む)
getbit key offset key に格納されている文字列値について、指定されたオフセットのビット (バイナリ) を取得します
getset key value キー値に新しい値を設定し、同時に古い値を返します キーが存在しない場合は nil
substr(key, start, end) の部分文字列を返しますkeyという名前の文字列の値
削除値の構文
del key Keyと同じ

バッチ書き込み
mset k1 v1 k2 v2...kn vn 複数の値を設定

バッチで読み取る

mget k1 k2... kn
自動インクリメントと自己デクリメント
incr key key の値は 1
incrby key integer に対応します。 key の値は、整数
#decr key# に対応します ## mondleigh 指定されたキーの末尾に値を追加します
msetnx(key1,値1...キーN、値N )

複数のキーと値を同時に設定します。以前にキーが存在しない場合に限ります。 Valid

String length
strlen key 文字を返しますキーの長さ

#2. ダブル キーと値のペア ハッシュ
ハッシュ型は、文字列型のフィールドと値のマッピング テーブルです。ハッシュはオブジェクトの保存に特に適しており、文字列よりもディスク容量が少なく、キーと値を持つマップ コンテナーとみなすことができます。 Redis の各ハッシュには、(2^32)-1 個のキーと値のペアを保存できます。

ハッシュのアプリケーション シナリオ:

は通常、ユーザー情報オブジェクト データを保存するために使用されます。

Redis のハッシュは、実際には内部に保存された値を HashMap として使用します。

代入構文

  • hset key field value
  • 指定されたキーのフィールドと値を設定します
  • hsetnx keyフィールド値
指定したキーのフィールドと値を設定します。キーがすでに存在する場合、有効になりません。

hmset key f1 v1 f2 v2 ... fn vn ハッシュ テーブルのキーに複数のフィールドと値 (フィールド値のペア) を同時に設定します。

値の構文
hget key field
フィールドに基づいて値を取得しますhmget key f1 f2 ... fn

複数のフィールドに基づいてすべての値を取得します

hgetall key ハッシュ テーブル内のすべてのフィールドと値を取得します

hkeys key すべてのフィールドを取得しますハッシュ テーブル
hvals キー ハッシュ テーブル内のすべてのフィールドに対応する値を取得します
hexists キー フィールド 指定されたフィールドがハッシュ テーブル キーに存在するかどうかを確認します
hlen key ハッシュ テーブル内のフィールドの数を取得します
削除構文
hdel key field1 field2 ... fieldn
ハッシュ テーブルの 1 つ以上のフィールドを削除します。 del key

Key と同じです。

増加および減算の構文

hincrby キー フィールド integer
It is Hash テーブル Key のフィールドに対応する値は integerhincrbyfloat キー フィールドの増分

によって増加します。ハッシュ テーブル Key のフィールドに対応する値は、増分で増加

# 3. 両端リンク リスト List

List 型はリンク リスト構造のコレクションであり、その主な機能にはプッシュ、ポップなどがあります。 、要素を取得します。さらに詳しく説明すると、List 型は両端のリンクされたリスト構造です。コレクションの先頭または末尾の要素は、関連する操作を通じて追加および削除できます。リストはスタックとキューの両方として使用でき、ほとんどの要求を満たすことができます。ニーズ。
キーが存在しない場合は、新しいリンク リストを作成します。

キーがすでに存在する場合は、新しいコンテンツを追加します。 すべての値を削除すると、対応するキーが消えます。

連結リストの演算は、先頭と末尾の両方で非常に効率的ですが、中間要素の演算効率は非常に低くなります。

  • #アプリケーション シナリオ
  • 大量のデータを含むコレクションからのデータの削除
  • リスト データの表示、リストのフォーカス、ファンリスト、メッセージコメントなど...ページネーション、注目のニュース(トップ10)など。ページング機能は lrange を使用して簡単に実装でき、ブログ システムでは、各ブログ投稿のコメントを別のリストに保存することもできます。
  • タスク キュー
    Web クライアントから送信されたコマンド リクエストを処理する際、一部の操作の実行時間が予想より長くなることがあります。実行するタスクの関連情報を配置することで、タスクをキューに入れてからそのキューを処理すると、ユーザーは完了までに時間がかかる操作を延期できます。タスク プロセッサに作業を引き渡すこの方法は、タスク キューと呼ばれます。通常、リストはメッセージ キューを実装し、順序を確保するために使用できます。

代入構文

lpush key value1 value2 ... valueN headに1つ以上の値を挿入しますリストの先頭(左から追加)
#rpush key value1 value2 ... valueN リストの先頭に1つ以上の値を挿入(右から追加)
lpushx キーの値 既存のリストの先頭(左端)に値を挿入します リストが存在しない場合、操作は無効です。
rpushx キーの値 既存のリストの末尾(右端)に値を挿入します リストが存在しない場合、操作は無効です。

値の構文

##llen key

リストの長さを取得しますlindex keyindex
の要素を取得しますインデックスによるリスト lrange key start stop
リストの指定範囲内の要素を取得します

削除構文

lpop key

Remove そしてリストの最初の要素を取得します (左側から削除されます) #lpop key リストの最後の要素を削除して取得します (右側から削除されます)
lrem key count value [[//]/ [削除カウント] key[
blpop key1 key2 [timeout] ] リストの最初の要素を削除して取得します。リスト内の要素がある場合、待機タイムアウトになるか、要素が見つかるまで、リストはブロックされます。要素がポップされるまで、
brpop key1 key2 timeout リストの最後の要素を削除して取得します。リストの要素はありません。リストは、待機時間が出るか、人口の多い要素が見つかるまでブロックされます。指定された範囲内にない要素。
構文を変更します

lset keyindex value

indexでリスト要素の値を設定しますlinsert key before|ワールド値の後

リスト内の要素ワールドの前または後に要素値を挿入します。

高度なコマンド

rpoplpush source destination

ソース リストから最後の要素を削除し、その要素を宛先リストに追加して、戻ります。 (キューと同様に、自分自身を操作できます) brpoplpush ソース宛先タイムアウト

ソース リストの最後の要素を削除し、その要素を宛先リストに追加し、要素がない場合は戻ります。ソース リストでは、ブロック リストはタイムアウトになるか、削除可能な要素が見つかるまで待機します。

4. 順序なしセット Set

Set は、文字列型の順序なしセットです。セットのメンバーは一意であり、重複したデータがセット内に存在することはできません。

Redis のコレクションはハッシュ テーブルを通じて実装されるため、追加、削除、検索の複雑さは O(1) です。 コレクション内のメンバーの最大数は 232 - 1 (4294967295、各コレクションには 40 億を超えるメンバーを保存できます) です。 JAVA の Hashtable コレクションに似ています

Redis セットの基礎となるストレージ構造は、特に魔法です。基礎となるストレージ構造は、intset と hashtable という 2 つのデータ構造を使用します。Intset は配列として理解できます。これは通常のハッシュ テーブルです (キーはセットの値、値は null)。

Intset は実際には内部の配列 (int8_t coentents[] 配列) であり、データの検索時に二分探索で実装されるため、データが順番に格納されます。

  • #アプリケーション シナリオ
2 つのセット間のデータ [計算] に対して交差、和集合、および差分演算を実行します

共同注意、共通嗜好、二親等友達などの機能が実装されていてとても便利です。上記のすべてのコレクション操作では、さまざまなコマンドを使用して、結果をクライアントに返すか、新しいコレクションに保存するかを選択することもできます。 一意性を利用して、Web サイトにアクセスするすべての独立した IP をカウントできます

  • 割り当て構文
  • sadd key member1 member2 .. .memberN
1 つ以上のメンバーをコレクションに追加します

値の構文

scard key set のメンバーの数を取得します
smembers key set 内のすべてのメンバーを返します
sismember key member member 要素はセット キーのメンバーです (開発中: 存在するかどうかを確認してください)
srandmember key count set

Delete 構文で 1 つ以上の乱数を返します

srem key member1 member2...memberN コレクションから 1 つ以上のメンバーを削除します
spop kye count 1 つ以上のメンバーを削除して返しますfrom the collection Random element

smove source destination member メンバー要素をソースコレクションから宛先コレクションに移動します

差分セット構文

sdiff key1 key2 指定されたすべてのセットの差分セットを返します (左側)
sdiffstore destination key1 key2 指定されたすべてのセットの差分セットを返し、それを格納しますdestination (destination データ消去の元の値)

Intersection 構文

sinter key1 key2 指定されたすべてのセット (共有データ) の交差を返します。
sinterstore destination key1 key2 指定されたすべてのセットの共通部分を返し、それらを destination に格納します

Union 構文
sunion key1 key2 指定されたすべてのセットを返します。セットの和集合
sunionstore 宛先 key1 key2 指定されたすべてのセットの和集合は、宛先 set

5 に格納されます。順序付きセット Zset

Redis zset も set と同様、文字列型要素のコレクションであり、メンバーの重複は許可されません。違いは、各要素が double 型のスコアに関連付けられていることです。 Redis はスコアを使用して、コレクションのメンバーを小さいものから大きいものまで並べ替えます。 zset のメンバーはユニークですが、スコアは繰り返すことができます。

  • 前のセットは k1 v1 v2です。
  • 現在の zset は k1 スコア 1 v1 スコア 2 v2です。

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

  • ランキング
    ①Twitterの公開タイムラインを公開時刻をスコアとして保存し、取得時に自動的に時刻順に並び替えることができます。
    ②クラス全体の成績を保存するソートされたセット。セットの値は学生 ID 番号、スコアはテストのスコアにすることができます。このようにして、データをセットに挿入すると、自然なソートが行われます。すでに実行されています。
    ③ Sorted Set を使用して重み付けされたキューを作成します。たとえば、通常のメッセージのスコアは 1、重要なメッセージのスコアは 2 になります。その後、ワーカー スレッドは、ワーカー スレッドの逆の順序で作業タスクを取得することを選択できます。スコア。重要なタスクに優先順位を付けます。

割り当て構文
zadd key スコア 1 メンバー 1 スコア 2 メンバー 2 順序付きセットに 1 つ以上のメンバーを追加するか、既存のメンバーのスコアを更新します。

値の構文
zcard key 順序付けされたセットのメンバーの数を取得します
zcount key min max の数指定された間隔スコアを持つセット内のメンバー
#zrank key member 順序付きセット内の指定されたメンバーのインデックスを返します]
zrange key start stop [スコア付き]インデックス間隔を通じて、指定された間隔スコアを持つメンバーの数を返します。 順序付きセットは、指定された範囲 (低から高) のメンバーに合成されます。
zrevrange key start stop [スコア付き] を返します。指定された範囲 (上位から下位) 内のメンバーを合成するために、インデックス間隔を通じて順序付きセットを合成します
zlexcount key,min,max 順序付きセット内の指定された辞書範囲内のメンバーの数を計算します

削除構文
del key shift Set
zrem key member [member ...] から 1 つ以上のメンバーを削除します。順序付きセット
zremrangebyrank key start stop 順序付きセットを削除する 指定されたランキング間隔のすべてのメンバー (最初の位は 0) (低位から高位にソート)
zremrangebyscore key min max 指定されたスコア間隔のすべてのメンバーを順序付きセットから削除します

Score auto-increment
zincrby key ncrement member スコアに増分を追加します順序付けされたセット内の指定されたメンバーの

# 6. HyperLoglog

Redis は、バージョン 2.8.9 で HyperLoglog 構造を追加しました。この構造はカーディナリティ統計を行うために使用されるアルゴリズムです。

利点: 入力要素がいくつあっても、カーディナリティの計算に必要なスペースは常に固定されており、非常に小さいです。

欠点: 入力要素のベースを計算するだけで、入力要素自体は保存されません。インデックスは各入力要素をセットのように返すことはできません。

基数とは何ですか?
たとえば、データ セットが {1, 2, 3, 3, 4, 5, 5} の場合、このデータ セットのカーディナリティ セットは {1, 2, 3, 4, 5} になります。 、カーディナリティは 5 です。いわゆるカーディナリティ推定とは、許容誤差範囲内でカーディナリティを迅速に計算することです。
HyperLogLog を使用する理由
従来、オブジェクトの基本値をカウントするには 12M のメモリが必要でした。10,000 個のオブジェクトをカウントすると、ほぼ 120G のメモリが必要となり、ビッグ データ シナリオでは広く使用できません。ただし、カウントには HyperLogLog が使用されます。 1 億データの基本値、この値では約 12M 必要となり、メモリ使用量が大幅に削減されます。

Redis の一般的なデータ型の操作手順の概要
pfadd key element1 element2 ... elementN 指定された要素を HyperLogLog に追加します
pfcount key 指定された HyperLogLog を返します推定カーディナリティ
pfmerge destkeysourcekey1sourcekey2 ...sourcekeyN 複数の HyperLogLog を 1 つの HyperLogLog にマージします

その他の関連する無料の学習推奨事項: redis

以上がRedis の一般的なデータ型の操作手順の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。