Redisラーニングおよびアプリケーションレコード(2)--共通データ型およびコマンド
9337 ワード
このセクションでは、Redisがサポートするデータ構造と一般的なコマンドについて説明します.
データ型
Redisは、文字、リスト、コレクション、続編、ハッシュテーブル、bit配列、スーパーログなど、さまざまなデータ型のストレージをサポートします.以下、それぞれ紹介します.
strings:通常文字を格納します.
Lists:リストは、通常、挿入された順序に従って整列されたチェーンテーブルです.リストの秩序性を利用して,メッセージキューをシミュレートすることができる.
Sets:集合する必要はなく、繰り返すことはできません.Setsは検索速度が最も速いデータ構造である.
Sorted sets:値とスコアが格納され、通常はスコアに基づいてソートされます.検索速度も非常に速い.
Hashes,ハッシュテーブルは,一連のキー値ペアを格納し,キーと値はstringsタイプである.ハッシュ・テーブルは、データ・オブジェクトを格納するのに適しています.
Bit arrays,バイナリ配列,暫定比最小の記憶空間.
HyperLogLogs:,比較的少ないので,興味のある読者はここhttp://redis.io/topics/data-types-intro#hyperloglogsを参考にすることができる.
Redis Key
Redis Keyについては、以下の点に注意してください.
1.KeyはBinary-safeで、stringsをkeyとしてもbit[]をkeyとしてもいいです.
2.Redis keyは最大512 M(Memcacheは1 Mのみ)をサポートしていますが、あまり長いkeyは推奨されません.これはメモリストレージが増加し、読み書き性能に影響を与えるためです.keyも短すぎることをお勧めしません.これは可読性が悪く、繰り返しやすいです.設計keyがデータを格納する場合は、一定の設計規範に従うことをお勧めします.
3.キーを設計するには、データ型とタイプの関係を表示することが望ましい.ユーザを格納するためのkeyのように、このように設計することができる.
set User:1000 "user1"
ユーザー権限のリストは、次のように定義できます.
sadd User:1000:Permissions "user-edit""user-delete""user-create"
共通コマンド
Redisがインストールされていない場合、try redisをオンラインで使用してRedisコマンドを実行することもできます.ここをクリックしてhttp://try.redis.io/に入ります.
1.文字列に関するコマンド
文字列はredisの最も基本的なデータ型であり、文字を格納するために使用されます.文字列はBinary safeで、byte[]配列を文字列に格納できます.
set/getは文字列を格納するために使用されます.
mget/msetは複数のkeyに値を付与し、複数の値を付与しやすく、プログラム性能を向上させる.
2.汎用命令
汎用コマンドは、すべてのデータ型に有効です.
DEL/EXISTS、キーの削除、キーの有無の判断
EXPIRES、キーの有効期限を設定します.
TTL、クエリkeyの有効期限
LLEN、クエリーには多要素データ型の長さが含まれます.リスト、set、sorted set、hashesに共通します.
ルールの自動作成/削除
複数要素データ型に要素を追加する場合(List,Set,SortedSet,Hashesなどを指す)、keyが存在する場合はkeyに要素を追加し、存在しない場合はkeyを作成する.
キーに要素を削除する場合は、キーが空の場合はキーを削除します.
上のコマンドでは、mylistを作成し、mylistの長さを1にし、要素をポップアップした後、mylistが削除されます.
3.Listに関するコマンド
LPUSH/RPUSHは、リストの左側/右側から要素を追加します.この2つのコマンドは、複数の要素を一度に追加できます.
LRANGEは、リストの左側から要素を取り、LANGEは3つのパラメータ、リスト名、インデックスの開始と終了を受信します.0は最初のインデックスを表し、-1は左と後ろのインデックスを表し、-2は最後から2番目のインデックスを表します.
LPOP/RPOP、リストの左側/右側から要素をポップアップします.コマンドが実行されると、ポップアップされた要素が返され、リストから削除されます.
BLPOP/BRPOPは、リストの左側/右側から要素をブロックしてポップアップします.
以上のコマンドはtasksから要素をポップアップし、tasksに要素がない場合は5 s後にnullを返します.時間パラメータが0に設定されている場合、要素が返されるまで永続的に待機します.
またbrpop/lblpopは、1つのリストが戻るまで複数のリストパラメータを受信し、すべてのリストが空であればブロックに入る.この特性を用いて,メッセージキュー(ブロックキュー)をシミュレートすることができる.ブロックキューのシミュレーションについては,後述する.brpop/lblpopの戻り値にはlist名と値が含まれます.
LTRIMは、リストの左側から要素を切り取り、余分な要素を除去します.このコマンドは、トップページにtop情報を表示する場合(例えば、企業ニュースの上位10件、最近発表された上位10人のユーザーのコメントを表示する場合)にLTRIMを使用して実現するのに役立ちます.
4.Hashesに関するコマンド
Hashesは一連のキー値ペアを格納し、Hashesはオブジェクトを格納するのに適しています.例えば、ユーザー情報をHashesに格納することができます.
hmset/hmget Hashes keyに複数の値を与える/Hashesから複数の値を取る
hget/hgetall、Hashesから1つの値/すべての値をとる
hincrby、fieldの値を増やします.
5.Setに関するコマンド
Setは一連のstringsの集合であり,彼らは無秩序である.
sadd/sismember/smembersは、要素がSetのメンバーであるか否かを判断するために、Setのすべてのメンバーを取得するために、Setに要素を追加します.
sinter,複数のSetの交差をとる
spop/srandmember/sunionstore/scard、集合からランダムに(重複しない)要素を取る/集合からランダムに(重複可能な)要素を取る/ある集合を別の集合にコピーする/集合の基数を取る(要素個数)
6.Sorted Setに関するコマンド
Sorted Setはsetとhashesの間のデータ構造であり、sorted setの要素は再送信できず、scoreと値が格納され、集合はscoreに基づいてソートされ、scoreが等しい場合は要素のアルファベット順にソートされる.
Sorted Setは、2つのオブジェクトのグループ間の関連付けに使用できます.たとえば、ユーザーと部門間の関連付けを確立するには、部門idをscoreとし、ユーザーidを値としてsorted setに格納します.
zadd、sorted setに要素を追加し、一度に複数の要素を追加できます.
zrange/zrevrange、sorted setの要素を取得します./sorted setの要素を逆順序で取得します.
この2つのコマンドにwithscoresを付けてscore情報を表示できます
zrangebyscoreは、score範囲に基づいてsorted set要素を取得します.次のコマンドは、誕生日が1950未満の要素を取得します.-infは負の無限大を表します.
zremrangebyscore、scoreに基づいて要素を除去します.次のコマンドでは、生年月日1940および1960の要素を削除します.
zrand/zrevrand、要素の位置を取得します./要素の位置を降順で取得します.
Redix 2.8から、scoreが同じで、値が異なる要素をsorted setに挿入できます.これらの要素はscoreが同じなので、値に基づいてソートされます.
zrangebylex/zrevrangebylex/zrevrangebylex/zlexcount、これらのコマンドはそれぞれ文字ソートのsetを操作するので、zrangebylex/zrevrangebylexは文字に基づいてsorted setの要素を取得することが不思議です.zrevrangebylexは文字に基づいて要素を除去し、zlexcountは要素を取得する個数である.
紙面に限られ、Redisの命令もいくつかあります.ここでは言及されていません.必要に応じてここにhttp://redis.io/commandsに行って調べることができます.
次はjedisフレームワーク、JavaベースのRedisクライアントについてご紹介します.
データ型
Redisは、文字、リスト、コレクション、続編、ハッシュテーブル、bit配列、スーパーログなど、さまざまなデータ型のストレージをサポートします.以下、それぞれ紹介します.
strings:通常文字を格納します.
Lists:リストは、通常、挿入された順序に従って整列されたチェーンテーブルです.リストの秩序性を利用して,メッセージキューをシミュレートすることができる.
Sets:集合する必要はなく、繰り返すことはできません.Setsは検索速度が最も速いデータ構造である.
Sorted sets:値とスコアが格納され、通常はスコアに基づいてソートされます.検索速度も非常に速い.
Hashes,ハッシュテーブルは,一連のキー値ペアを格納し,キーと値はstringsタイプである.ハッシュ・テーブルは、データ・オブジェクトを格納するのに適しています.
Bit arrays,バイナリ配列,暫定比最小の記憶空間.
HyperLogLogs:,比較的少ないので,興味のある読者はここhttp://redis.io/topics/data-types-intro#hyperloglogsを参考にすることができる.
Redis Key
Redis Keyについては、以下の点に注意してください.
1.KeyはBinary-safeで、stringsをkeyとしてもbit[]をkeyとしてもいいです.
2.Redis keyは最大512 M(Memcacheは1 Mのみ)をサポートしていますが、あまり長いkeyは推奨されません.これはメモリストレージが増加し、読み書き性能に影響を与えるためです.keyも短すぎることをお勧めしません.これは可読性が悪く、繰り返しやすいです.設計keyがデータを格納する場合は、一定の設計規範に従うことをお勧めします.
3.キーを設計するには、データ型とタイプの関係を表示することが望ましい.ユーザを格納するためのkeyのように、このように設計することができる.
set User:1000 "user1"
ユーザー権限のリストは、次のように定義できます.
sadd User:1000:Permissions "user-edit""user-delete""user-create"
共通コマンド
Redisがインストールされていない場合、try redisをオンラインで使用してRedisコマンドを実行することもできます.ここをクリックしてhttp://try.redis.io/に入ります.
1.文字列に関するコマンド
文字列はredisの最も基本的なデータ型であり、文字を格納するために使用されます.文字列はBinary safeで、byte[]配列を文字列に格納できます.
set/getは文字列を格納するために使用されます.
> set mykey somevalue OK > get mykey "somevalue"
INCR/INCRBY/DECR/DECRBY用于对字符串做加减运算,这些命令会将strings类型的数据转换成整形,然后再进行加减运算。
Redis对数字的运算是原子性的,是很好的计数器。
> set counter 100
OK
> incr counter
(integer) 101
> incr counter
(integer) 102
> incrby counter 50
(integer) 152
mget/msetは複数のkeyに値を付与し、複数の値を付与しやすく、プログラム性能を向上させる.
> mset a 10 b 20 c 30
OK
> mget a b c
1) "10"
2) "20"
3) "30"
2.汎用命令
汎用コマンドは、すべてのデータ型に有効です.
DEL/EXISTS、キーの削除、キーの有無の判断
> set mykey hello
OK
> exists mykey
(integer) 1
> del mykey
(integer) 1
> exists mykey
(integer) 0
EXPIRES、キーの有効期限を設定します.
> set key some-value
OK
> expire key 5
(integer) 1
> get key (immediately)
"some-value"
> get key (after some time)
(nil)
TTL、クエリkeyの有効期限
> set key 100 ex 10
OK
> ttl key
(integer) 9
LLEN、クエリーには多要素データ型の長さが含まれます.リスト、set、sorted set、hashesに共通します.
> del mylist
(integer) 0
> llen mylist
(integer) 0
> lpop mylist
(nil)
ルールの自動作成/削除
複数要素データ型に要素を追加する場合(List,Set,SortedSet,Hashesなどを指す)、keyが存在する場合はkeyに要素を追加し、存在しない場合はkeyを作成する.
キーに要素を削除する場合は、キーが空の場合はキーを削除します.
> lput mylist 1
(integer) 1
> lpop mylist
(integer) 0
上のコマンドでは、mylistを作成し、mylistの長さを1にし、要素をポップアップした後、mylistが削除されます.
3.Listに関するコマンド
LPUSH/RPUSHは、リストの左側/右側から要素を追加します.この2つのコマンドは、複数の要素を一度に追加できます.
> rpush mylist A
(integer) 1
> rpush mylist B
(integer) 2
> lpush mylist first
(integer) 3
> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"
LRANGEは、リストの左側から要素を取り、LANGEは3つのパラメータ、リスト名、インデックスの開始と終了を受信します.0は最初のインデックスを表し、-1は左と後ろのインデックスを表し、-2は最後から2番目のインデックスを表します.
> rpush mylist 1 2 3 4 5 "foo bar"
(integer) 9
> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"
4) "1"
5) "2"
6) "3"
7) "4"
8) "5"
9) "foo bar"
LPOP/RPOP、リストの左側/右側から要素をポップアップします.コマンドが実行されると、ポップアップされた要素が返され、リストから削除されます.
> rpush mylist a b c
(integer) 3
> rpop mylist
"c"
> rpop mylist
"b"
> rpop mylist
"a"
BLPOP/BRPOPは、リストの左側/右側から要素をブロックしてポップアップします.
> brpop tasks 5
1) "tasks"
2) "do_something"
以上のコマンドはtasksから要素をポップアップし、tasksに要素がない場合は5 s後にnullを返します.時間パラメータが0に設定されている場合、要素が返されるまで永続的に待機します.
またbrpop/lblpopは、1つのリストが戻るまで複数のリストパラメータを受信し、すべてのリストが空であればブロックに入る.この特性を用いて,メッセージキュー(ブロックキュー)をシミュレートすることができる.ブロックキューのシミュレーションについては,後述する.brpop/lblpopの戻り値にはlist名と値が含まれます.
LTRIMは、リストの左側から要素を切り取り、余分な要素を除去します.このコマンドは、トップページにtop情報を表示する場合(例えば、企業ニュースの上位10件、最近発表された上位10人のユーザーのコメントを表示する場合)にLTRIMを使用して実現するのに役立ちます.
> rpush mylist 1 2 3 4 5
(integer) 5
> ltrim mylist 0 2
OK
> lrange mylist 0 -1
1) "1"
2) "2"
3) "3"
4.Hashesに関するコマンド
Hashesは一連のキー値ペアを格納し、Hashesはオブジェクトを格納するのに適しています.例えば、ユーザー情報をHashesに格納することができます.
hmset/hmget Hashes keyに複数の値を与える/Hashesから複数の値を取る
> hmset user:1000 username antirez birthyear 1977 verified 1
OK
> hmget user:1000 username birthyear no-such-field
1) "antirez"
2) "1977"
3) (nil)
hget/hgetall、Hashesから1つの値/すべての値をとる
> hget user:1000 birthyear
"1977"
> hgetall user:1000
1) "username"
2) "antirez"
3) "birthyear"
4) "1977"
5) "verified"
6) "1"
hincrby、fieldの値を増やします.
> hincrby user:1000 birthyear 10
(integer) 1987
> hincrby user:1000 birthyear 10
(integer) 1997
5.Setに関するコマンド
Setは一連のstringsの集合であり,彼らは無秩序である.
sadd/sismember/smembersは、要素がSetのメンバーであるか否かを判断するために、Setのすべてのメンバーを取得するために、Setに要素を追加します.
> sadd myset 1 2 3 (integer) 3 > smembers myset 1. 3 2. 1 3. 2
> sismember myset 3
(integer) 1
> sismember myset 30
(integer) 0
sinter,複数のSetの交差をとる
> sadd set1 1 2 3 4
(integer) 4
> sadd set2 2 4 5 7
(integer) 4
>sinter set1 set2
1) "2"
2) "4"
spop/srandmember/sunionstore/scard、集合からランダムに(重複しない)要素を取る/集合からランダムに(重複可能な)要素を取る/ある集合を別の集合にコピーする/集合の基数を取る(要素個数)
6.Sorted Setに関するコマンド
Sorted Setはsetとhashesの間のデータ構造であり、sorted setの要素は再送信できず、scoreと値が格納され、集合はscoreに基づいてソートされ、scoreが等しい場合は要素のアルファベット順にソートされる.
Sorted Setは、2つのオブジェクトのグループ間の関連付けに使用できます.たとえば、ユーザーと部門間の関連付けを確立するには、部門idをscoreとし、ユーザーidを値としてsorted setに格納します.
zadd、sorted setに要素を追加し、一度に複数の要素を追加できます.
> zadd hackers 1940 "Hedy Lamarr" 1936 "Alan Turing" 1952 "Alex Hu"
(integer) 3
zrange/zrevrange、sorted setの要素を取得します./sorted setの要素を逆順序で取得します.
> zrange hackers 0 -1
1) "Alan Turing"
2) "Hedy Lamarr"
3) "Alex Hu"
> zrevrange hackers 0 -1
1) "Alex Hu"
2) "Hedy Lamarr"
3) "alan Turing"
この2つのコマンドにwithscoresを付けてscore情報を表示できます
> zrange hackers 0 -1
1) "Alan Turing"
2)1936
3) "Hedy Lamarr"
4) 1940
5) "Alex Hu"
6) 1952
zrangebyscoreは、score範囲に基づいてsorted set要素を取得します.次のコマンドは、誕生日が1950未満の要素を取得します.-infは負の無限大を表します.
> zrangebyscore hackers -inf 1950
1) "Alan Turing"
2) "Hedy Lamarr"
3) "Claude Shannon"
4) "Alan Kay"
5) "Anita Borg"
zremrangebyscore、scoreに基づいて要素を除去します.次のコマンドでは、生年月日1940および1960の要素を削除します.
> zremrangebyscore hackers 1940 1960
(integer) 4
zrand/zrevrand、要素の位置を取得します./要素の位置を降順で取得します.
> zrank hackers "Anita Borg"
(integer) 4
Redix 2.8から、scoreが同じで、値が異なる要素をsorted setに挿入できます.これらの要素はscoreが同じなので、値に基づいてソートされます.
zrangebylex/zrevrangebylex/zrevrangebylex/zlexcount、これらのコマンドはそれぞれ文字ソートのsetを操作するので、zrangebylex/zrevrangebylexは文字に基づいてsorted setの要素を取得することが不思議です.zrevrangebylexは文字に基づいて要素を除去し、zlexcountは要素を取得する個数である.
> zadd hackers 0 "Alan Kay" 0 "Sophie Wilson" 0 "Richard Stallman" 0 "Anita Borg" 0 "Yukihiro Matsumoto" 0 "Hedy Lamarr" 0 "Claude Shannon" 0 "Linus Torvalds" 0 "Alan Turing"
> zrangebylex hackers [B [P 1) "Claude Shannon" 2) "Hedy Lamarr" 3) "Linus Torvalds"
redis> ZADD myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
redis> ZADD myzset 0 f 0 g
(integer) 2
紙面に限られ、Redisの命令もいくつかあります.ここでは言及されていません.必要に応じてここにhttp://redis.io/commandsに行って調べることができます.
次はjedisフレームワーク、JavaベースのRedisクライアントについてご紹介します.