ホームページ  >  記事  >  バックエンド開発  >  Redis チュートリアル (2): 文字列データ型

Redis チュートリアル (2): 文字列データ型

黄舟
黄舟オリジナル
2016-12-28 14:18:361170ブラウズ

1. 概要:

文字列型は Redis の最も基本的なデータ ストレージ型であり、Redis ではバイナリ セーフです。つまり、この型は JPEG 画像データや Json オブジェクト記述などのあらゆる形式のデータを受け入れることができます。等Redis では、文字列型 Value が保持できる最大データ長は 512M です。

2. 関連コマンドリスト:

O(1) O(1)O(1)
コマンドプロトタイプ 時間計算量 コマンドの説明 戻り値
APPENDkeyvalue O(1) Keyがすでに存在する場合、APPENDコマンドはパラメータValueのデータを既存のキーに追加します終わりを大切に。キーが存在しない場合、APPEND コマンドは新しいキー/値を作成し、値の長さを追加します。キーが存在しない場合、その初期値は 0 で、decr 後の値は -1 になります。 Value の値を Hello などの整数値に変換できない場合、操作は失敗し、対応するエラー メッセージが返されます。注: この演算の値の範囲は 64 ビットの符号付き整数です。 デクリメント後の値。
INCRkey O(1) は、指定されたキーの値をアトミックに 1 ずつインクリメントします。キーが存在しない場合、その初期値は 0 で、増加後の値は 1 になります。 Value の値を Hello などの整数値に変換できない場合、操作は失敗し、対応するエラー メッセージが返されます。注: この操作の値の範囲は、64 ビット符号付き整数型 の増分された Value 値です。
DECRBYkey decrement O(1) は、指定されたKeyの値をアトミックにデクリメントして減らします。キーが存在しない場合、その初期値は 0 で、decrby 後の値は -decrement です。 Value の値を Hello などの整数値に変換できない場合、操作は失敗し、対応するエラー メッセージが返されます。注: この演算の値の範囲は 64 ビットの符号付き整数です。 Reduced Value
INCRBYkey increment O(1) 指定されたKeyのValueをアトミックに増加させます。キーが存在しない場合、その初期値は 0 で、incrby 後の値は増加します。 Value の値を Hello などの整数値に変換できない場合、操作は失敗し、対応するエラー メッセージが返されます。注: この演算の値の範囲は 64 ビットの符号付き整数です。 値の増加
GETkey O(1) 指定されたKeyの値を取得します。キーに関連付けられた値が文字列型でない場合、GET コマンドは文字列値の取得にしか使用できないため、Redis はエラー メッセージを返します。 Key に関連する Value。Key が存在しない場合は nil を返します
Key が既に存在する場合は、指定された文字列 Value を保持するように Key を設定します。本来の価値。 常に「OK」を返します。 GETSETkey value
Keyを指定されたValueに原子的に設定し、Keyの元の値を返します。 GET コマンドと同様に、このコマンドは文字列値のみを処理できます。それ以外の場合は、Redis が関連するエラー情報を提供します。 Key が以前に存在しない場合は、Key の元の値を返します。nil が返されます。 STRLENkey
Value が文字列型でない場合、Redis は実行に失敗し、関連するエラー情報を提供します。 指定された Key の Value 文字長を返します。Key が存在しない場合は、0 を返します O(1) 1 つは、Key の値をアトミックに設定することです。指定した文字列に、Redis サーバー内でのキーの生存時間 (秒) を設定します。このコマンドは主に Redis をキャッシュサーバーとして使用する場合に使用されます。
SETNXkey value O(1) 指定されたKeyが存在しない場合、指定された文字列Valueを保持するようにKeyを設定します。このときの効果はSETコマンドと同等です。逆に、キーがすでに存在する場合、コマンドは何もせずに戻ります。 1は設定が成功したことを意味し、それ以外の場合は0
SETRANGEkey offset value O(1) 指定されたKeyの文字列値の一部を置き換えます。オフセットから始まる置換長は、コマンドの 3 番目のパラメーター値の文字列長です。オフセットの値がキーの元の値の文字列長より大きい場合、Redis は値の末尾を埋めます (オフセット - strlen(value)) 番号 0x00 を追加し、新しい値を追加します。キーが存在しない場合、このコマンドは元の値の長さが 0 であると想定し、新しい値を追加する前にオフセット 0x00s を追加します。文字列値の最大長が 512M であるとすると、オフセットの最大値は 536870911 になります。最後に、コマンドによって実行中に指定されたキーの元の値の長さが増加する場合、Redis は置換されたすべての文字列を収容するのに十分なメモリを再割り当てするため、パフォーマンスが低下することに注意してください。 変更された文字列値の長さ。
GETRANGEkey start end O(1) インターセプトされた文字列の長さが非常に短い場合、このコマンドの時間計算量は O(1) と見なすことができ、それ以外の場合は O(N) となります。 N はインターセプトを意味します 部分文字列の長さ。このコマンドが部分文字列をインターセプトする場合、開始文字 (0 は最初の文字を表します) と終了文字の両方が閉じた間隔に含まれます。終了値が Value の文字長を超える場合、このコマンドは開始文字から始まる文字のみをインターセプトします。 . すべてのキャラクターデータ。 Substring
SETBITkey offset value O(1) 指定されたオフセットの BIT 値を設定します。値は 1 または 0 のみです。設定後、コマンドはオフセット BIT の元の値を返します。価値。指定されたキーが存在しない場合、このコマンドは新しい値を作成し、指定されたオフセットのパラメータの BIT 値を設定します。 Offset が Value の文字長より大きい場合、Redis は Value を拡張し、指定された Offset のパラメータに BIT 値を設定します。中央に追加される BIT 値は 0 です。最後に注意すべきことは、オフセット値は 0 より大きくなければならないということです。 指定されたオフセットの BIT の元の値。
GETBITkey offset O(1) 指定された Offset の BIT の値、0 または 1 を返します。このコマンドは、Offset が文字列値の長さを超えると 0 を返すため、空の文字列の場合は常に 0 を返します。 指定された Offset の BIT 値
MGETkey [key...] O(N) N は、取得された Key の数を表します。指定されたすべてのキーの値を返します。いずれかのキーが存在しない場合、またはその値が文字列型でない場合、キーの値は nil を返します。 指定されたキーのセットの値のリストを返します。
MSETkey value [key value ...] O(N) Nは指定されたKeyの数を表します。このコマンドは、パラメータ内のすべてのキー/値設定操作をアトミックに完了します。その具体的な動作は、SET コマンドを複数回繰り返し実行することでわかります。 このコマンドは失敗せず、常に OK を返します。
MSETNXkey value [key value ...] O(N) Nは、指定されたKeyの数を表します。このコマンドは、パラメータ内のすべてのキー/値設定操作をアトミックに完了します。その具体的な動作は、SETNX コマンドを複数回繰り返し実行することでわかります。ただし、ここで明確に述べておく必要があるのは、このキーのバッチ内のいずれかのキーがすでに存在する場合、操作はすべてロールバックされる、つまりすべての変更が有効にならないということです。 1 はすべてのキーが正常に設定されたことを意味し、0 はキーが変更されていないことを意味します。

3. コマンドの例:

1. SET/GET/APPEND/STRLEN:

  /> redis-cli   #执行Redis客户端工具。
    redis 127.0.0.1:6379> exists mykey                   #判断该键是否存在,存在返回1,否则返回0。
    (integer) 0
    redis 127.0.0.1:6379> append mykey "hello"      #该键并不存在,因此append命令返回当前Value的长度。
    (integer) 5
    redis 127.0.0.1:6379> append mykey " world"    #该键已经存在,因此返回追加后Value的长度。
    (integer) 11
    redis 127.0.0.1:6379> get mykey                      #通过get命令获取该键,以判断append的结果。
    "hello world"
    redis 127.0.0.1:6379> set mykey "this is a test" #通过set命令为键设置新值,并覆盖原有值。
    OK
    redis 127.0.0.1:6379> get mykey
    "this is a test"
    redis 127.0.0.1:6379> strlen mykey                  #获取指定Key的字符长度,等效于C库中strlen函数。
    (integer) 14


2. INCR/DECR/INCRBY/DECRBY:
 redis 127.0.0.1:6379> set mykey 20     #设置Key的值为20
    OK
    redis 127.0.0.1:6379> incr mykey         #该Key的值递增1
    (integer) 21
    redis 127.0.0.1:6379> decr mykey        #该Key的值递减1
    (integer) 20
    redis 127.0.0.1:6379> del mykey          #删除已有键。
    (integer) 1
    redis 127.0.0.1:6379> decr mykey        #对空值执行递减操作,其原值被设定为0,递减后的值为-1
    (integer) -1
    redis 127.0.0.1:6379> del mykey   
    (integer) 1
    redis 127.0.0.1:6379> incr mykey        #对空值执行递增操作,其原值被设定为0,递增后的值为1
    (integer) 1
    redis 127.0.0.1:6379> set mykey hello #将该键的Value设置为不能转换为整型的普通字符串。
    OK
    redis 127.0.0.1:6379> incr mykey        #在该键上再次执行递增操作时,Redis将报告错误信息。
    (error) ERR value is not an integer or out of range
    redis 127.0.0.1:6379> set mykey 10
    OK
    redis 127.0.0.1:6379> decrby mykey 5 
    (integer) 5
    redis 127.0.0.1:6379> incrby mykey 10
    (integer) 15

3. GETSET:

  redis 127.0.0.1:6379> incr mycounter      #将计数器的值原子性的递增1
    (integer) 1
    #在获取计数器原有值的同时,并将其设置为新值,这两个操作原子性的同时完成。
    redis 127.0.0.1:6379> getset mycounter 0  
    "1"
    redis 127.0.0.1:6379> get mycounter       #查看设置后的结果。
    "0"

4. SETEX:

  redis 127.0.0.1:6379> setex mykey 10 "hello"   #设置指定Key的过期时间为10秒。
    OK    
    #通过ttl命令查看一下指定Key的剩余存活时间(秒数),0表示已经过期,-1表示永不过期。
    redis 127.0.0.1:6379> ttl mykey                       
    (integer) 4
    redis 127.0.0.1:6379> get mykey                      #在该键的存活期内我们仍然可以获取到它的Value。
    "hello"
    redis 127.0.0.1:6379> ttl mykey                        #该ttl命令的返回值显示,该Key已经过期。
    (integer) 0
    redis 127.0.0.1:6379> get mykey                      #获取已过期的Key将返回nil。
    (nil)

5. SETNX:

    redis 127.0.0.1:6379> del mykey                      #删除该键,以便于下面的测试验证。
    (integer) 1
    redis 127.0.0.1:6379> setnx mykey "hello"        #该键并不存在,因此该命令执行成功。
    (integer) 1
    redis 127.0.0.1:6379> setnx mykey "world"       #该键已经存在,因此本次设置没有产生任何效果。
    (integer) 0
    redis 127.0.0.1:6379> get mykey                      #从结果可以看出,返回的值仍为第一次设置的值。
    "hello"

6. SETRANGE/GETRANGE:

redis 127.0.0.1:6379> set mykey "hello world"       #设定初始值。
    OK
    redis 127.0.0.1:6379> setrange mykey 6 dd          #从第六个字节开始替换2个字节(dd只有2个字节)
    (integer) 11
    redis 127.0.0.1:6379> get mykey                         #查看替换后的值。
    "hello ddrld"
    redis 127.0.0.1:6379> setrange mykey 20 dd        #offset已经超过该Key原有值的长度了,该命令将会在末尾补0。
    (integer) 22
    redis 127.0.0.1:6379> get mykey                           #查看补0后替换的结果。
    "hello ddrld\x00\x00\x00\x00\x00\x00\x00\x00\x00dd"
    redis 127.0.0.1:6379> del mykey                         #删除该Key。
    (integer) 1
    redis 127.0.0.1:6379> setrange mykey 2 dd         #替换空值。
    (integer) 4
    redis 127.0.0.1:6379> get mykey                        #查看替换空值后的结果。
    "\x00\x00dd"   
    redis 127.0.0.1:6379> set mykey "0123456789"   #设置新值。
    OK
    redis 127.0.0.1:6379> getrange mykey 1 2      #截取该键的Value,从第一个字节开始,到第二个字节结束。
    "12"
    redis 127.0.0.1:6379> getrange mykey 1 20   #20已经超过Value的总长度,因此将截取第一个字节后面的所有字节。
    "123456789"

7. SETBIT/GETBIT:

  redis 127.0.0.1:6379> del mykey
    (integer) 1
    redis 127.0.0.1:6379> setbit mykey 7 1       #设置从0开始计算的第七位BIT值为1,返回原有BIT值0
    (integer) 0
    redis 127.0.0.1:6379> get mykey                #获取设置的结果,二进制的0000 0001的十六进制值为0x01
    "\x01"
    redis 127.0.0.1:6379> setbit mykey 6 1       #设置从0开始计算的第六位BIT值为1,返回原有BIT值0
    (integer) 0
    redis 127.0.0.1:6379> get mykey                #获取设置的结果,二进制的0000 0011的十六进制值为0x03
    "\x03"
    redis 127.0.0.1:6379> getbit mykey 6          #返回了指定Offset的BIT值。
    (integer) 1
    redis 127.0.0.1:6379> getbit mykey 10        #Offset已经超出了value的长度,因此返回0。
    (integer) 0

8. MSET/MGET/MSETNX:

    redis 127.0.0.1:6379> mset key1 "hello" key2 "world"   #批量设置了key1和key2两个键。
    OK
    redis 127.0.0.1:6379> mget key1 key2                        #批量获取了key1和key2两个键的值。
    1) "hello"
    2) "world"
    #批量设置了key3和key4两个键,因为之前他们并不存在,所以该命令执行成功并返回1。
    redis 127.0.0.1:6379> msetnx key3 "stephen" key4 "liu" 
    (integer) 1
    redis 127.0.0.1:6379> mget key3 key4                   
    1) "stephen"
    2) "liu"
    #批量设置了key3和key5两个键,但是key3已经存在,所以该命令执行失败并返回0。
    redis 127.0.0.1:6379> msetnx key3 "hello" key5 "world" 
    (integer) 0
    #批量获取key3和key5,由于key5没有设置成功,所以返回nil。
    redis 127.0.0.1:6379> mget key3 key5                   
    1) "stephen"
    2) (nil)

以上がRedisチュートリアル(2)の内容です: Stringデータ型。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。