Redisのは何ですか
Redis
あるオープン、メモリシステムに格納されたデータ構造、それはとして使用することができ、データベース、キャッシュやメッセージングミドルウェア。それは、次のようなデータ構造の複数の種類、サポートされていた文字列strings
、ハッシュ hashes
、リスト lists
、セット sets
、順序集合 sorted sets
範囲クエリ、ビットマップ、hyperloglogsと地理空間(地理空間)半径指数クエリのを。
Redis
また、コピーが付属していますreplication
()、LUAスクリプトLua scripting
、LRU駆動イベント() LRU eviction
()、(業務transactions
)と永続ディスクの異なるレベルpersistence
()、および(RedisのセンチネルによるSentinel
)と自動パーティショニング(Cluster
高可用性)high availability
()。
ああ、はい、これはredis
上記のプレゼンテーション、明確で簡潔な中国の公式サイト。
NoSQLのは何ですか
私たちは、それが知っているredis
非リレーショナルデータベースですNoSQL
。そして、なぜそこにいますかNoSQL
?NoSQL
それは何ですか?
S単一のデータベース
小さなウェブサイトのトラフィックでは、トラフィック要求に対応するために十分なデータベースを使用します。
キャッシュ+スプリット
トラフィックの上昇に伴い、データベースは、私たちのニーズを満たすことができませんでした。高いパフォーマンスを得るために、我々は、バッファ層と作られたデータベースクラスタ、構造最適化及び個別の読み取りと書き込みとの中間にあります。
ここでのキャッシュがあるNoSQL
もちろん、キャッシュを行う、唯一であるNoSQL
ように、一つの機能Redis
のみの機能をキャッシュのこの種を持っていません。例えば、それは達成することができ、簡単なメッセージキューを、セッション共有を解決するため、カウンタ、リーダーボード、友人関係に対処し、その機能上、我々が見ることができると、Redis
私たちは今、それを学ぶことを可能にする非常に強力なツールです!
Redisの一般的なコマンド
まず、我々はの面でデータ型についての脇に置きRedis
、共通のコマンド。
操作キーと値
Redis
あるkey
value
メモリキャッシュデータベースは、すべてのデータは、独自のキーを持っています。
ここでは、プレゼンテーションを容易にするために、私は、文字列関連の設定コマンドを使用しました
keys [pattern]
要件すべてのキー出会いを取得します。時間の複雑さはされてO(n)
いるため、一般的に、本番環境で使用されていないシングルスレッドの実行時間のかかるタスクが他のタスクをブロックすることができます。一般的に使用し、コマンドの代替(非ブロッキング)。Redis
scan
dbsize
現在のデータの数を取得しますが格納されます。exists key
キーの存在かどうかを判断しますdel key
指定されたデータを削除しますtype key
キーのデータ型を取得します。rename key newkey
重命名
有効期限
Redis
多くのデータがとして使用されているキャッシュデータ、およびに、キャッシュの有効期限を持っている必要がありRedis
、非常に強力な提供する有効期限機能を設定します。
expire key seconds
キーの有効期限を設定してください。ttl key
、残り時間の正数を表すを返し、キーの残り時間を参照-1永久に、-2代表は期限切れまたは存在しません。
5つの基本的なデータ型のRedisの
上記では、私はたくさん言うRedis
これらに依存して達成するためによると、キャッシュとしては、カウンター、リーダーボード、友人、関係などの他の機能を達成するためRedis
のデータ構造。全体でRedis
5つの基本的なデータ構造の合計(一部の高度なデータ構造は、後に話すだろう)している、彼らは文字列strings
、ハッシュ hashes
、リスト lists
、コレクション sets
、順序集合 sorted sets
。
文字列の文字列
ほとんどのプログラミング言語で持っているString
データベースがために、文字列型をRedis
必要不可欠です。
set key value
[設定]get key
キーの値を取得します。mset key1 value1 key2 value2
バッチとで配置された原子は、ネットワークの時間消費を削減するために使用することができますmget key1 key2
バッチ取得する原子は、ネットワークの時間消費を削減するために使用することができますincr key
指定されたキーの値をインクリメントdecr key
指定されたキーの値をデクリメントincrby key value
インクリメント値を指定します。decrby key value
指定された値をデクリメントincrbyfloat key floatvalue
増加指定浮動小数点演算は、最初のいくつかの実装のために使用することができるカウンター機能。setnx key value
キーが存在しない場合、あなたは、正常に設定することができ、それ以外の場合は失敗します、プラス有効期限の制限、それは、分散Redisのロックを実装する方法である(後述します)。set key value xx
フロントとは対照的に成功がある場合、設定され、そうでない場合(更新に相当する)フェイルgetset key newvalue
新しい値を設定して、以前の値を返しますappend key value
追加コンテンツは、オリジナルコンテンツですstrlen key
文字列の長さを取得します。getrange key start end
コンテンツの指定した範囲を取得します。setrange key index value
コンテンツの設定指定した範囲setex key seconds value
設定と有効期限を設定しますset key value ex seconds nx
キーは設定値のために存在し、有効期限を設定し、しない分散ロック・実装。
ハッシュ
実際には、我々は理解することができるhash
ように小さなRedisの、Redis
フードの下、そのJava
中のHashMap
ほとんど全ての利用+リストアレイ達成するために、二次元構造。
違いはで、ということであるRedis
辞書の値は文字列だけすることができますが、それらはrehash
、同じではありませんRedis
の使用プログレッシブ焼き直し。
すべてのクエリがデータの移行前に完了するよう、2つのハッシュ辞書を照会しながら、古いものと新しいハッシュ辞書、データ移行の焼き直しが辞書の内容は、新しい辞書に移行少し古いとなります時にも保持されます新しい辞書は、辞書上の場所になります。
ここでは、上を見てhash
基本的な操作。
hset key field value
辞書にキーの値を設定します。hsetnx key field value
辞書にキーの値を設定します(存在しません)hmset key field1 value1 field2 value2 ...
バッチセットhget key field
辞書にキーの値を取得します。hmget key field1 field2
一括取得hgetall key
すべてを見ますhdel key field
キーを削除するにはhexists key field
決定するかどうかがhlen key
辞書で指定されたキーに対応するストレージの数を取得します。hvals key
すべての値を返します。hkeys key
すべてのキーを返します。hincrby key field increValue
値の値を増加させる(負を高めることができます)hincrbyfloat key field floatValue
一定値(フロート)の値を増加させます
リスト
Redis
リストに対応介して底部である(双方向リンクリスト)、リストそうするために、達成するためにすぐに挿入および削除操作が、インデックス位置決めが非常に遅いです。Java
LinkedList
list
Redis
数を提供するlist
よう、事業示し、他の操作は、完全な達成するためにそれらを使用することができ、スタックやキューを。
ここでは、上を見てlist
基本的な操作。
lpush key item1 item2 item3...
左から描画rpush key item1 item2 item3...
引出権lpop key
スタックから取り残さrpop key
スタックの右アウトlindex key index
注意して素子O(N)のインデックスを取得lrange key start end
慎重にはO(n)の要素の指定された範囲を取得しますlinsert key before|after item newitem
指定された要素の前にあるかの後ろに新しい要素を追加します。lrem key count value
指定された値を削除する要素の数であります- カウント= 0:値の値のすべての要素を削除します
- 数> 0:値の要素を削除カウント値に左から右へ
- <0カウント:右からやる削除|数|値の値の要素と
ltrim key start end
指定された範囲内の要素の保持lset key index newValue
インデックスの値を更新blpop key timeout
次いで、ブロッキング(タイムアウトは0手段永久の時間ブロッキングが指定されていません)brpop key timeout
次いで、ブロッキングは(タイムアウトが永久0手段の時間をブロック指定)の両方を実装するために使用することができない消費者の生産を
結論として、私たちが使用することができます左または右右スタックうちに達成するために、キューの左または右のうちに左とアウトを、左。
- lpush + LPOP =スタック
- rpush + RPOP =スタック **
- lpush + RPOP =キュー
- rpush + LPOP =キュー
- lpush / rpush + LTRIM =キャップされたリスト(固定長のリスト)
- lpush + brpop =メッセージキュー(メッセージキュー)
- rpush + blpop =メッセージキュー(メッセージキュー)
セットする
Redis
set
同等Java
のHashSet
要素を特徴とする(順不同のセット)、繰り返すことができないが、我々は重み関数のいくつかを達成するためにそれを使用することができます。我々はまた、いくつかのコレクションを持っている交差点で、労働組合取るように異なるユーザ、共通の利益との間で、共通の友人を得ることができますし、他の操作を。
ここでは、上を見とるset
基本的な操作のいくつかを。
sadd key value
要素を追加しますsdel key value
要素を削除するにはsismember key value
コレクション内の要素かどうかを判断しますsrandmember key count
(構造セットに影響を与えない)の要素の指定された乱数を取得します。spop key count
ランダムポップアップ要素の集合から(破棄結合)smembers key
O中の全ての要素のコレクション(n)の複雑さを得ますscard key
コレクションの数を取得しますsinter set1 set2 ...
交差点のすべてのコレクションを取得します。sdiff set1 set2 ...
すべての違いセットコレクションを取得します。sunion set1 set2 ...
労働組合のすべてのコレクションを取得します。
トークン
Redis
で順序集合は、ビデオ再生などのランキングは、そのような生徒の成績のランキングなど興味深い機能の多くを通してそれを達成することができます。zset
zset
それは使用することですジャンプテーブルを我々が使用するために、連続した空間のことだけで、この配列を知って、達成するために、バイナリサーチの高速位置決めのために、しかし、リストではありません。(インデックス秩序のインサートを横断するジャンプ方法を使用して)多くの時間を保存するときに学生がジャンプテーブルがそれを詰め込むことができます理解していない場合は、リストを見つけるためにジャンプ台。
のは、上を見てみましょうzset
基本的な操作のいくつかを。
zadd key score element
、並べ替えのためのスコアを追加し、値ジャンプテーブル以来、時間の複雑さはO(LOGN)で、ユニークが必要です。zrem key element
素子O(1)時間の複雑さを削除しますzscore key element
要素のスコアを取得します。zincrby key incrScore element
要素のスコアを増やしますzrange key start end [withscores]
要素の指定された範囲に加えて、インデックスを取得withscores
スコアが返されたO(LOGN + m)の時間計算量zrangebyscore key minScore maxScore [withscores]
要素の指定された範囲を取得プラス画分はwithscores
、スコアを返されたO(logN個+ m)の時間計算量zcard key
長さの順序集合を取得します。
Redisのトランザクションとパイプ
パイプラインパイプライン
いくつかのシナリオでは米国操作の1つは、複数のコマンドを実行する必要があるかもしれませんが、我々はただ1回の転送コマンドをする場合には、時間がかかり、多くの無駄になるネットワークを指令するコマンドを実行した場合Redis
、その後に実行行くと、それが減少しますオーバーヘッド多くの時間。しかし、そのノートpipeline
命令がパイプラインに到達するためにそれを意味する、アトミックに実行されていないRedis
サーバが他のコマンドに散在する可能性がある場合。
業務
リレーショナル・データベースは持っているACID
機能をRedis
A(原子)とI(アイソレーション)、D(持続性)が設定されているかどうかを確認することを保証するために、RDB
またはAOF
永続操作するので、しかし、保証一貫できないRedis
トランザクションはロールバックをサポートしていません。
我々は、単にとして理解することができるRedis
だけ以上に取引Pipeline
上記のように他のコマンドは、分割する、すなわち、よりアトミック操作ではありません。
-
multi
トランザクションの開始をマーク -
exec
トランザクションの実行 -
discard
クリアは、キュー内のすべてのコマンドの業務で、それは、トランザクション全体を持ち上げることです。 -
watch key
あなたは、この要素の値は、トランザクションのコミット時に他のクライアントに変更された発見した場合、トランザクションの開始前に、要素の監視、トランザクションは失敗します。 -
unwatch key
リフト監視
Redisの一般的なコマンドの概要
以下のためまあ、これは、この記事の内容全体でRedis
あなたが忘れたり、実行する方法を学んだことがありませんか?
記事の助けあなたは、ああ私に賞賛をお願いした場合は(#^。^#)
Redis
興味が(#^。^#)私に従うことができる場合は、次の記事で私は、書き込まれます。