高性能データベースキャッシュを構築するredis(二)


一、概説


高性能データベースキャッシュを構築するredis(一)このドキュメントでは、Redisデータベース(key/value)の特徴、機能、簡単な構成手順について説明します.このドキュメントを読んだことがある人は、Redisデータベースについて少し理解すると信じています.このドキュメントでは、Redisデータベースのデータ型文字列(String)の操作について説明します.もちろん、Redisがサポートするデータ型は1つだけでなく、ハッシュ(Hashs)、リスト(Lists)、コレクション(Sets)、順序付きコレクション(Sorted Sets)は、後続の章で逐一紹介される.
 

二、文字列(String)


String(String)はRedisデータベースの中で最も簡単なタイプで、1つのKeyは1つのValueに対応し、その上でサポートされている操作はMemcachedの操作と似ているが、Rediの機能はMemcachedよりも豊富で、次にStringタイプはバイナリで安全で、任意のデータを含むことができる.
 

三、Stringコマンドの詳細と例


SET


機能:keyのvalue値を設定します.
構文:SET Key value
例:
127.0.0.1:6379>SET mykey "sunnybody"
OK
127.0.0.1:6379>GET mykey
"sunnybody"

ヒント:設定可能な値が存在する場合、次の例では、既存のvalue値が上書きされます.

GET


機能:keyの値を取得する
構文:GET Key
例:
127.0.0.1:6379>SET str "hello world"
OK
127.0.0.1:6379>GET str
"helloworld"

SETNX


機能:keyのvalue値を設定し、設定したkeyが存在する場合にのみ、何もしません.
構文:SETNX Key value
例:
127.0.0.1:6379>SETNX id 1005
(integer) 1
127.0.0.1:6379>SETNX id 1006
(integer) 0
127.0.0.1:6379>GET id 
"1005"

#ヒント:上記のように、設定したkeyが存在する場合、数値0を出力します.keyは存在せず、数字1を出力する.
 

SETEX


機能:keyのvalue値を設定し、指定したseconds時間以降のキーの有効期限を設定します.
構文:SETEX Keyseconds value
例:
127.0.0.1:6379>SETEX name 20 MySQL
OK
127.0.0.1:6379>TTL name
(integer) 15
127.0.0.1:6379>GET name
"MySQL"
127.0.0.1:6379>TTL name
(integer) -2
127.0.0.1:6379>GET name
(nil)

#ヒント:キーのvalue値が20秒後に期限切れになるように設定し、TTLでキーの有効時間を取得できます.TTLで取得した値が-2の場合、キーが期限切れになったことを示すので、GET操作を実行すると、nil値が出力され、空に表示されます.
 

SETRANGE


機能:keyがvalue値の一部を上書きし、指定したoffsetからvalueの値を上書きし、valueの元の価値長を表示します.
構文:SETRANGE Key offset value
例:
127.0.0.1:6379>SET email "[email protected]"
OK
127.0.0.1:6379>GET email
"[email protected]"
127.0.0.1:6379>SETRANGE email 8 sina.com
(integer) 17
127.0.0.1:6379>GET email
[email protected]

#ヒント:例から[email protected]文字列の長さは17で、指定した8文字目からvalueの値をsina.に上書きする.comは、上書きされた値が元の値より小さい場合は保存されるので、出力された結果は[email protected];
 

GETRANGE


機能:keyがvalue値に対応するサブストリングを返し、サブストリングの位置はstartとendによって決定される.Redis 2.0以前のバージョンコマンドはSUBSTRであり、GETRANGEに置き換えられる.
構文:GETRANGE Key start end
例:
127.0.0.1:6379>SET address 'bei jing shi'
OK
127.0.0.1:6379>STRLEN address
(integer) 12
127.0.0.1:6379>GETRANGE address 0 7
"beijing"
127.0.0.1:6379>GETRANGE address -12 -5
"beijing"
127.0.0.1:6379>GETRANGE address 0 -1
"bei jingshi"

#ヒント:key対応文字列Valueの長さをコマンドSTRLENで取得し、長さは0で開始、-1で終了します.-1は文字列Valueの最後の文字を表し、-2は2番目の文字である.
 

MSET


機能:複数のKEYのValue値を設定し、もしあなたが設定したKEYが存在するならば、MSETは元のKEYのValue値を置換する.
文法:MSET key value[key value..................]
例:
127.0.0.1:6379>SET USER MySQL
OK
127.0.0.1:6379>GET USER
"MySQL"
127.0.0.1:6379>MSET ID 1001 USER "MariaDB" IPhone 18210089932 ADDRESS "BeiJing"
OK
127.0.0.1:6379>GET USER 
"MariaDB"
127.0.0.1:6379>GET ADDRESS
"BeiJing"

#ヒント:例から分かるように、USERはValueに対応する値がMySQLであり、MSETの操作を行うことによって、USERの値がMariaDBに置き換えられた.
 

MGET


機能:指定したKEYの全てのValueを返す
文法:MGET Key[key 2 key 3......]
例:
127.0.0.1:6379>MSET ID 1001 USER "MariaDB" IPhone 18210089932 ADDRESS "BeiJing"
OK
127.0.0.1:6379>MGET ID USER IPhone ADDRESS CITY
1)"1001"
2)"MariaDB"
3)"18210089932"
4) "BeiJing"
5) (nil)

#ヒント:KEYの定義には実際の意味があり、各KEYに対応するValue値が異なり、指定されたKEYが存在しない場合、出力情報は特殊文字nil、すなわち空を返します.
 

MSETNX


機能:複数のKEYのValue値を設定し、1つのkeyが既に存在する場合、MSETNXは今回の操作を実行しない.この特性に基づいて、MSETNXは、すべての操作が成功するか、1つも実行されないかを実現することができ、これにより、一意のオブジェクトの異なるフィールドを表すために異なるkeyを設定するために使用することができる.
文法:MSETNX Key Value[key 2 value key 3 value.......]
例:
127.0.0.1:6379>FLUSHALL
OK
127.0.0.1:6379>SET USER MariaDB
OK
127.0.0.1:6379>MSETNX ID 1001 USER "MariaDB" IPhone 18210089932 ADDRESS "BeiJing"
(integer) 0
127.0.0.1:6379>GET ID
(nil)
127.0.0.1:6379>MSETNX ID 1001 IPhone 18210089932 ADDRESS "Bei Jing"
(integer) 1127.0.0.1:6379>MGET ID IPhone ADDRESS
1)"1001"
2)"18210089932"
3) "BeiJing"

#ヒント:FLUSHALLですべてのKEYをクリアした.例から分かるように、MSETNXを実行して複数のKEYのValue値を設定する場合、1つのKEYが存在する限り、今回の操作は失敗し、戻り値は0である.そうでない場合、操作は成功し、戻り値は1です.
 

GETSET


機能:KEYのValue値を設定し、旧KEY対応文字列のValue値を返す
構文:GETSET Key Value
例:
127.0.0.1:6379>SET USER MariaDB
OK
127.0.0.1:6379>GETSET USER MySQL
"MariaDB"
127.0.0.1:6379>GET USER
"MySQL"

#ヒント:GETSETコマンドについては、INCRコマンドと組み合わせて使用し、リセットをサポートするカウント機能を実現する.例を挙げると、イベントが発生するたびに、一部のプログラムはINCRを呼び出してkey mycounterに1を追加しますが、カウンタの値を取得し、自動的に0にリセットする必要がある場合があります.これはGETSET mycounter"0"によって実現でき、以下のようになる.
127.0.0.1:6379>SET mycounter 30
OK
127.0.0.1:6379>INCR mycounter
(integer) 31
127.0.0.1:6379>GETSET mycounter 0
"31"

DECR


機能:Keyに対応するデジタル減算操作に対して、毎回1を減らして、しかもValueの値は文字列であることができなくて、あるいは値の範囲を超えます;
構文:DECR Key
例:
127.0.0.1:6379>SET key1 25
OK
127.0.0.1:6379>DECR key1
(integer) 24
127.0.0.1:6379>DECR key1
(integer) 23
127.0.0.1:6379>GET key1
"23"

INCR


機能:Keyに対応する数字を加算し、毎回1を加算し、Valueの値は文字列ではなく、値の範囲を超えてはならない.
構文:INCR key
例:
127.0.0.1:6379>SET key1 25
OK
127.0.0.1:6379>INCR key1
(integer) 26
127.0.0.1:6379>INCR key1
(integer) 27
127.0.0.1:6379>GET key1
"27"

DECRBY


機能:キーの対応する数字に対して減算操作をして、毎回指定した数字を減算して、しかもValueの値は文字列であることができなくてあるいは値の範囲を超えます;
構文:DECRBY Key
例:
127.0.0.1:6379>SET key1 25
OK
127.0.0.1:6379>DECRBY key1 5
(integer) 20
127.0.0.1:6379>DECRBY key1 5
(integer) 15
127.0.0.1:6379>GET key1
"15"

INCRBY


機能:キーに対応する数字を加算し、指定した数字を加算するたびに、Valueの値が文字列ではなく、値の範囲を超えてはならない.
構文:INCRBY Key
例:
127.0.0.1:6379>SET key1 25
OK
127.0.0.1:6379>INCRBY key1 5
(integer) 30
127.0.0.1:6379>INCRBY key1 5
(integer) 35
127.0.0.1:6379>GET key1
"35"

STRLEN


機能:KEYのvalue値の長さを返し、stringタイプとしてのみ使用します.
構文:STRLEN Key
例:
127.0.0.1:6379>SET NAME MariaDB
OK
127.0.0.1:6379>STRLEN NAME
(integer) 7

APPEND


機能:KeyがValueに対応する値を追加し、value値の長さを返します.
構文:APPEND Key value
例:
127.0.0.1:6379>SET Email MariaDB@
OK
127.0.0.1:6379>APPEND Email yahoo.com
(integer) 17
127.0.0.1:6379>GET Email
"[email protected]"
127.0.0.1:6379>APPEND Qmail [email protected]
(integer) 21
127.0.0.1:6379>GET Qmail
[email protected]

#ヒント:指定されたkeyが存在しない場合、APPENDはSET操作と同様に、空の文字列のkeyを作成してから追加操作を実行します.