推奨 (無料): redis チュートリアル
Redis コマンドは、redis 上で操作を実行するために使用されます。サービス 。 Redis サービスでコマンドを実行するには、redis
クライアントが必要です。redis-cli
コマンドを使用して Redis クライアントを起動できます。完全な起動コマンドはredis-cli -h host -p port -a passwd
です。
Redis には 5 つの一般的に使用されるデータ型があります: string、hash、list、setおよび zset (ソートされたセット順序付きセット)。これらのタイプを学習する前に、一般的なコマンド キーの管理を学習する必要があります。これらのタイプについては、以下で詳しく紹介します。 API の詳細については、ここを参照してください。
一般的なコマンド キー管理
主要なアプリケーション シナリオ:
キーの名前付けの提案:
キー名は大文字と小文字が区別されます。キーは長すぎてはならず、長さを超えないようにしてください。 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 サイトは、ビジネス統計カウントのニーズを達成するために、この赤の機能を使用しています。
キーが既に存在する場合は設定されずに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
キー値に新しい値を設定し、同時に古い値を返します キーが存在しない場合は nilsubstr(key, start, end)
の部分文字列を返しますkeyという名前の文字列の値
削除値の構文del key
Keyと同じ
バッチ書き込み
mset k1 v1 k2 v2...kn vn
複数の値を設定
バッチで読み取る
mget k1 k2... kn
自動インクリメントと自己デクリメントincr key
key の値は 1incrby key integer
に対応します。 key の値は、整数 #decr key# に対応します ## mondleigh
指定されたキーの末尾に値を追加します msetnx(key1,値1...キーN、値N )
String lengthstrlen key
文字を返しますキーの長さ
#2. ダブル キーと値のペア ハッシュ
ハッシュ型は、文字列型のフィールドと値のマッピング テーブルです。ハッシュはオブジェクトの保存に特に適しており、文字列よりもディスク容量が少なく、キーと値を持つマップ コンテナーとみなすことができます。 Redis の各ハッシュには、(2^32)-1 個のキーと値のペアを保存できます。
は通常、ユーザー情報オブジェクト データを保存するために使用されます。
Redis のハッシュは、実際には内部に保存された値を HashMap として使用します。
代入構文
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
増加および減算の構文
hincrby キー フィールド integer
It is Hash テーブル Key のフィールドに対応する値は integerhincrbyfloat キー フィールドの増分
# 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 そしてリストの最初の要素を取得します (左側から削除されます)
lset keyindex value#lpop key
リストの最後の要素を削除して取得します (右側から削除されます)lrem key count value
[[//]/ [削除カウント] key[blpop key1 key2 [timeout
] ] リストの最初の要素を削除して取得します。リスト内の要素がある場合、待機タイムアウトになるか、要素が見つかるまで、リストはブロックされます。要素がポップされるまで、brpop key1 key2 timeout
リストの最後の要素を削除して取得します。リストの要素はありません。リストは、待機時間が出るか、人口の多い要素が見つかるまでブロックされます。指定された範囲内にない要素。構文を変更します
indexでリスト要素の値を設定しますlinsert key before|ワールド値の後
リスト内の要素ワールドの前または後に要素値を挿入します。rpoplpush source destination
高度なコマンド
ソース リストから最後の要素を削除し、その要素を宛先リストに追加して、戻ります。 (キューと同様に、自分自身を操作できます) brpoplpush ソース宛先タイムアウト
ソース リストの最後の要素を削除し、その要素を宛先リストに追加し、要素がない場合は戻ります。ソース リストでは、ブロック リストはタイムアウトになるか、削除可能な要素が見つかるまで待機します。Set は、文字列型の順序なしセットです。セットのメンバーは一意であり、重複したデータがセット内に存在することはできません。
4. 順序なしセット Set
Redis のコレクションはハッシュ テーブルを通じて実装されるため、追加、削除、検索の複雑さは O(1) です。 コレクション内のメンバーの最大数は 232 - 1 (4294967295、各コレクションには 40 億を超えるメンバーを保存できます) です。 JAVA の Hashtable コレクションに似ています
Redis セットの基礎となるストレージ構造は、特に魔法です。基礎となるストレージ構造は、intset と hashtable という 2 つのデータ構造を使用します。Intset は配列として理解できます。これは通常のハッシュ テーブルです (キーはセットの値、値は null)。
Intset は実際には内部の配列 (int8_t coentents[] 配列) であり、データの検索時に二分探索で実装されるため、データが順番に格納されます。2 つのセット間のデータ [計算] に対して交差、和集合、および差分演算を実行します
- #アプリケーション シナリオ
共同注意、共通嗜好、二親等友達などの機能が実装されていてとても便利です。上記のすべてのコレクション操作では、さまざまなコマンドを使用して、結果をクライアントに返すか、新しいコレクションに保存するかを選択することもできます。 一意性を利用して、Web サイトにアクセスするすべての独立した IP をカウントできます
1 つ以上のメンバーをコレクションに追加します
- 割り当て構文
- sadd key member1 member2 .. .memberN
値の構文
scard key
set のメンバーの数を取得しますsmembers key
set 内のすべてのメンバーを返しますsismember key member
member 要素はセット キーのメンバーです (開発中: 存在するかどうかを確認してください)srandmember key count
setDelete 構文で 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
指定されたすべてのセットの和集合は、宛先 set5 に格納されます。順序付きセット 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 keyshift Set
zrem key member [member ...]から 1 つ以上のメンバーを削除します。順序付きセット
zremrangebyrank key start stop順序付きセットを削除する 指定されたランキング間隔のすべてのメンバー (最初の位は 0) (低位から高位にソート)
zremrangebyscore key min max指定されたスコア間隔のすべてのメンバーを順序付きセットから削除します
Score auto-increment
# 6. HyperLoglog
zincrby key ncrement memberスコアに増分を追加します順序付けされたセット内の指定されたメンバーの
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 必要となり、メモリ使用量が大幅に削減されます。
pfadd key element1 element2 ... elementN指定された要素を HyperLogLog に追加します
pfcount key指定された HyperLogLog を返します推定カーディナリティ
pfmerge destkeysourcekey1sourcekey2 ...sourcekeyN複数の HyperLogLog を 1 つの HyperLogLog にマージします
以上がRedis の一般的なデータ型の操作手順の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。