Redis(一)--基本紹介とStringタイプ
Redisは豊富なデータフォーマットをサポートし、以下はRedisがサポートするデータフォーマットのリストです.
Binary-safe strings
バイナリ・セキュリティの文字列 Lists
挿入時間でソートされた文字列のセットは、基本的にチェーンテーブルです.(文字通り、リストが長すぎると他のデータ構造に置き換えられます) Sets
ユニークな無秩序な文字列の集合 Sorted sets
集合でもありますが、各要素はスコアに対応し、集合内の要素はこのスコアでソートされます.Sorted setsはtop 10の要素を取得するような操作をサポートする. Hashes
通常の意味のmapで、keyもvalueも文字列です. Bit arrays
Redisはビット配列のように文字列を操作することをサポートし、1に設定されたビットの数を統計したり、0または1に設定された最初のビットを探したりするなど、いくつかのカラムビット操作を実行することができます. HyperLogLogs
これは確率論におけるデータ構造であり,集合の基数を推定するために用いられる.これはオフィス用のtokenカードと同じで、原理が複雑で、とても簡単です.
このセクションでは、Redisの基本的な操作とStringタイプに関する操作について説明します.
Redis keys
ここではRedis keysのルールについて説明します. redis keysはバイナリで安全です.
1つのデータはバイナリで安全です.つまり、バイナリシーケンスでデータを表すことができます.例えば「foo」という文字列はバイナリで安全で、JPEGファイルもバイナリで安全です!長すぎるkeyはよくない 例えば、1 K長のkeyを定義すると、記憶に無駄があるだけでなく、keyを比較するのに時間がかかります.ビジネスのkeyが長い場合は(SHA 1)ハッシュで処理でき、メモリと帯域幅を効率的に節約できます.短すぎるkeyは通常 ではありません
何事も極端に走らないでください.「u 10000 flw」の可読性は「user:100000:followers」の可読性がないに違いありません.コードを書くときは自分に優しくしてください. schema を定義しようとする
1つの推奨事項:フィールド間はコロンで区切られ、単語間はハイフンで区切られます.たとえば、「comment:1234:replay-to」などです. keyの最大長は512 MB
Redis Strings
stringsはredisの中で最も簡単なタイプであり、memcachedの唯一のデータ型でもある.(作者がそう言ったのは少し自慢の意味がある)
redisディレクトリのredis-cliツールを開き、stringタイプの使い方を見てみましょう.
以上のように、SETコマンドとGETコマンドを使用してstringタイプの値にアクセスします.注意SETは元の値を上書きし、後続のvalueが空の値であっても元の値をクリアします.
SETコマンドにnxパラメータを追加し、keyが存在するときにSET操作に失敗することを指定できます.あるいはxxパラメータを追加して、keyがすでに存在する場合にのみSET操作が成功することを指定します.
文字列として数値を格納することもでき、redisはこの数値に一連の原子操作(INCR、INCRBY、DECR、DECRBYなど)を提供している.
上記の原子操作は、複数のクライアントの競合問題を効果的に解決する.
GETSETコマンドは、keyに新しい値を設定し、古い値を返すことができます.1つの典型的な使用シーンはウェブサイトのpvを計算します:毎回ユーザーがアクセスする時、私達はINCRコマンドでカウンタをプラスすることができて、もし私達が1時間ごとにpvを統計するならば、GETSETコマンドを使って新しい値を“0”に設定して、このようにいかなるアクセスを失うことはありません求めます.
MSETとMGETは複数のkeyを一度に操作することができ,遅延を低減するのに有利である(残念ながらcodisはこの2つの操作のサポートが不十分である)
Redis keyの操作
Redisはkeyを操作するコマンドを提供し、最も有用なのはEXIST、DEL、TYPEの3つです.EXISTは1つのキーが存在するかどうかを判断するために使用され、DELコマンドは1つのキーを削除することができ、TYPEコマンドはこのキーに対応するvalueタイプを表示することができる.
有効期限
ここではRedisの有効期限メカニズムを見てみましょう.各キーに生存時間を設定することができます.この時間になると、自動的にDELコマンドを呼び出して削除する効果と同じように、キーが自動的に破棄されます.
Redisの有効期限に注意すべき点:では、有効期限を秒またはミリ秒単位で設定する がサポートされています. Redisシステムの期限切れ時間に対する解析精度は常にミリ秒 である.の有効期限の情報は、ディスクに複数バックアップされて格納されるため、Redisサーバの停止の影響を受けません.
上記の例では、EXPIREコマンドでkeyの有効期限を5秒と指定し、2回のGETコマンドの間、このkeyは自動的に破棄されます.
PERSISTコマンドを使用してkeyの有効期限を削除することもできます.
また、keyを作成するときに有効期限を直接指定することもできます.
上記の例では、keyの値を100とし、有効期限が10秒であり、その後TTLコマンドでkeyの残りの生存時間を表示し、keyが有効期限切れになった後も生存時間が-2と表示されていることがわかります(ステータス識別規則であると推測されます).
以下のように、PEXPIREコマンドとPTTLコマンドを使用して、ミリ秒の精度で対応する操作を行います.
バイナリ・セキュリティの文字列
挿入時間でソートされた文字列のセットは、基本的にチェーンテーブルです.(文字通り、リストが長すぎると他のデータ構造に置き換えられます)
ユニークな無秩序な文字列の集合
集合でもありますが、各要素はスコアに対応し、集合内の要素はこのスコアでソートされます.Sorted setsはtop 10の要素を取得するような操作をサポートする.
通常の意味のmapで、keyもvalueも文字列です.
Redisはビット配列のように文字列を操作することをサポートし、1に設定されたビットの数を統計したり、0または1に設定された最初のビットを探したりするなど、いくつかのカラムビット操作を実行することができます.
これは確率論におけるデータ構造であり,集合の基数を推定するために用いられる.これはオフィス用のtokenカードと同じで、原理が複雑で、とても簡単です.
このセクションでは、Redisの基本的な操作とStringタイプに関する操作について説明します.
Redis keys
ここではRedis keysのルールについて説明します.
1つのデータはバイナリで安全です.つまり、バイナリシーケンスでデータを表すことができます.例えば「foo」という文字列はバイナリで安全で、JPEGファイルもバイナリで安全です!
何事も極端に走らないでください.「u 10000 flw」の可読性は「user:100000:followers」の可読性がないに違いありません.コードを書くときは自分に優しくしてください.
1つの推奨事項:フィールド間はコロンで区切られ、単語間はハイフンで区切られます.たとえば、「comment:1234:replay-to」などです.
Redis Strings
stringsはredisの中で最も簡単なタイプであり、memcachedの唯一のデータ型でもある.(作者がそう言ったのは少し自慢の意味がある)
redisディレクトリのredis-cliツールを開き、stringタイプの使い方を見てみましょう.
127.0.0.1:6379> set mykey somevalue
OK
127.0.0.1:6379> get mykey
"somevalue"
以上のように、SETコマンドとGETコマンドを使用してstringタイプの値にアクセスします.注意SETは元の値を上書きし、後続のvalueが空の値であっても元の値をクリアします.
SETコマンドにnxパラメータを追加し、keyが存在するときにSET操作に失敗することを指定できます.あるいはxxパラメータを追加して、keyがすでに存在する場合にのみSET操作が成功することを指定します.
127.0.0.1:6379> set mykey newval nx
(nil)
127.0.0.1:6379> get mykey
"somevalue"
127.0.0.1:6379> set mykey2 newvalue xx
(nil)
127.0.0.1:6379> set mykey newvalue xx
OK
文字列として数値を格納することもでき、redisはこの数値に一連の原子操作(INCR、INCRBY、DECR、DECRBYなど)を提供している.
127.0.0.1:6379> set counter 100
OK
127.0.0.1:6379> get counter
"100"
127.0.0.1:6379> incr counter
(integer) 101
127.0.0.1:6379> incrby counter 50
(integer) 151
上記の原子操作は、複数のクライアントの競合問題を効果的に解決する.
GETSETコマンドは、keyに新しい値を設定し、古い値を返すことができます.1つの典型的な使用シーンはウェブサイトのpvを計算します:毎回ユーザーがアクセスする時、私達はINCRコマンドでカウンタをプラスすることができて、もし私達が1時間ごとにpvを統計するならば、GETSETコマンドを使って新しい値を“0”に設定して、このようにいかなるアクセスを失うことはありません求めます.
MSETとMGETは複数のkeyを一度に操作することができ,遅延を低減するのに有利である(残念ながらcodisはこの2つの操作のサポートが不十分である)
127.0.0.1:6379> mset a 10 b 20 c 30
OK
127.0.0.1:6379> mget a b c
1) "10"
2) "20"
3) "30"
Redis keyの操作
Redisはkeyを操作するコマンドを提供し、最も有用なのはEXIST、DEL、TYPEの3つです.EXISTは1つのキーが存在するかどうかを判断するために使用され、DELコマンドは1つのキーを削除することができ、TYPEコマンドはこのキーに対応するvalueタイプを表示することができる.
127.0.0.1:6379> set mykey hello
OK
127.0.0.1:6379> exists mykey
(integer) 1
127.0.0.1:6379> del mykey
(integer) 1
127.0.0.1:6379> exists mykey
(integer) 0
127.0.0.1:6379> set mykey x
OK
127.0.0.1:6379> type mykey
string
127.0.0.1:6379> del mykey
(integer) 1
127.0.0.1:6379> type mykey
none
有効期限
ここではRedisの有効期限メカニズムを見てみましょう.各キーに生存時間を設定することができます.この時間になると、自動的にDELコマンドを呼び出して削除する効果と同じように、キーが自動的に破棄されます.
Redisの有効期限に注意すべき点:
127.0.0.1:6379> set key some-value
OK
127.0.0.1:6379> get key
"some-value"
127.0.0.1:6379> expire key 5
(integer) 1
127.0.0.1:6379> get key
"some-value"
127.0.0.1:6379> get key
(nil)
上記の例では、EXPIREコマンドでkeyの有効期限を5秒と指定し、2回のGETコマンドの間、このkeyは自動的に破棄されます.
PERSISTコマンドを使用してkeyの有効期限を削除することもできます.
また、keyを作成するときに有効期限を直接指定することもできます.
127.0.0.1:6379> set key 100 ex 10
OK
127.0.0.1:6379> ttl key
(integer) 8
127.0.0.1:6379> ttl key
(integer) -2
127.0.0.1:6379> ttl key
(integer) -2
127.0.0.1:6379> get key
(nil)
上記の例では、keyの値を100とし、有効期限が10秒であり、その後TTLコマンドでkeyの残りの生存時間を表示し、keyが有効期限切れになった後も生存時間が-2と表示されていることがわかります(ステータス識別規則であると推測されます).
以下のように、PEXPIREコマンドとPTTLコマンドを使用して、ミリ秒の精度で対応する操作を行います.
127.0.0.1:6379> set key 100
OK
127.0.0.1:6379> get key
"100"
127.0.0.1:6379> pexpire key 15000
(integer) 1
127.0.0.1:6379> ttl key
(integer) 11
127.0.0.1:6379> pttl key
(integer) 8523