第2部:RedisのString(文字列)

6611 ワード

append APPEND key value
keyがすでに存在し、文字列である場合、appendコマンドはkeyの元の値の末尾にvalueを追加します.キーが存在しない場合は、SETキーvalueを実行するようにします.
戻り値:valueを追加した後、keyの文字列の長さ.
#       key    APPEND

redis> EXISTS myphone               #    myphone    
(integer) 0

redis> APPEND myphone "nokia"       #       key    APPEND ,    SET myphone "nokia"
(integer) 5                         #     


#            APPEND

redis> APPEND myphone " - 1110"     #     5        12    
(integer) 12

redis> GET myphone
"nokia - 1110"

bitcount BITCOUNT key[start][end]関連コマンドsetbit(keyに格納されている文字列値に対して、指定されたオフセット量のビットを設定または消去する(bit))
指定された文字列のうち、1に設定されたビット数を計算します.
一般に、指定された文字列全体がカウントされ、追加のstartパラメータまたはendパラメータを指定することで、カウントを特定のビットのみで行うことができます.
startパラメータとendパラメータの設定はgetrangeと同様で、負の数値を使用できます.たとえば、-1は最後のビットを表し、-2は最後から2番目のビットを表します.
存在しないkeyは空の文字列として扱われるため,存在しないkeyに対してBITCOUNT操作を行い,結果は0となる.
戻り値:1に設定されたビットの数.
redis> BITCOUNT bits
(integer) 0

redis> SETBIT bits 0 1          # 0001
(integer) 0

redis> BITCOUNT bits
(integer) 1

redis> SETBIT bits 3 1          # 1001
(integer) 0

redis> BITCOUNT bits
(integer) 2

モード:bitcountを使用してユーザーのオンライン回数統計を実現
Bitmapはいくつかの特定のタイプの計算に非常に有効である.
例えば、ユーザーAが何日オンラインになったのか、ユーザーBが何日オンラインになったのかなど、自分のサイト上のユーザーのオンライン頻度を記録したいと仮定し、データとしてbetaテストなどの活動に参加するユーザーを決定します.このモードはSETBITやBITCOUNTを使用して実現できます.
たとえば,ユーザがある日オンラインになるたびにSETBITを用い,ユーザ名をkeyとし,その日に代表されるサイトのオンライン日をoffsetパラメータとし,このoffset上のを1に設定する.
例えば、今日がウェブサイトのオンライン化100日目であり、ユーザpeterが今日ウェブサイトを閲覧した場合、SETBIT peter 100 1が実行される.明日もpeterがウェブサイトを閲覧し続けると、SETBIT peter 101 1にコマンドが実行される.
peterの合計からのオンライン回数を計算する場合は、BITCOUNTコマンド:BITCOUNT peterを実行し、結果としてpeterのオンラインの合計日数が計算されます.
DECR DECR key関連コマンドdecrby(自己設定減量)関連コマンドincr(インクリメント+1)関連コマンドincrby(自己設定インクリメント)関連コマンドincybyfloat(浮動小数点設定インクリメント)
keyに格納されている数値を1つ減らします.
キーが存在しない場合、キーの値はまず0に初期化され、DECR操作が実行されます.
値にエラーのタイプが含まれている場合、または文字列タイプの値が数値として表示されない場合は、エラーが返されます.
本操作の値は64ビット(bit)符号付き数字表示に制限されます.
戻り値:decrementを減算したkeyの値.
#       key    DECRBY

redis> SET count 100
OK

redis> DECRBY count 20
(integer) 80


#       key   DECRBY

redis> EXISTS pages
(integer) 0

redis> DECRBY pages 10
(integer) -10

getrange GETRANGE key start end
keyの文字列値のサブ文字列を返します.文字列の切り取り範囲はstartとendの2つのオフセット量によって決まります(startとendを含めます).
負数オフセットは、文字列の最後からカウントを表し、-1は最後の文字を表し、-2は最後から2番目を表します.
戻り値:切り取られたサブ文字列.
redis> SET greeting "hello, my friend"
OK

redis> GETRANGE greeting 0 4          #     0-4   ,  4。
"hello"

redis> GETRANGE greeting -1 -5        #        
""

redis> GETRANGE greeting -3 -1        #     
"end"

redis> GETRANGE greeting 0 -1         #          
"hello, my friend"

redis> GETRANGE greeting 0 1008611    #             ,         
"hello, my friend"

getset GETSET key value
与えられたkeyの値をvalueに設定し、keyの古い値(old value)を返します.
keyが存在するが文字列タイプではない場合、エラーが返されます.
戻り値:指定したkeyの古い値を返します.キーに古い値がない場合、すなわちキーが存在しない場合、nilを返します.
redis> GETSET db mongodb    #     ,   nil
(nil)

redis> GET db
"mongodb"

redis> GETSET db redis      #      mongodb
"mongodb"

redis> GET db
"redis"

mset MSET key value [key value ...] 関連コマンドmget(所与のkeyの値をすべて(1つ以上)返す)関連コマンドmsetnx(所与のkeyがすべて存在しない場合のみ)
1つ以上のkey-valueペアを同時に設定します.
与えられたkeyがすでに存在する場合、msetは新しい値で元の古い値を上書きします.
戻り値:常にOKを返す(MSETが失敗するはずがないため)
redis> MSET date "2012.3.30" time "11:00 a.m." weather "sunny"
OK

redis> MGET date time weather
1) "2012.3.30"
2) "11:00 a.m."
3) "sunny"


# MSET       

redis> SET google "google.hk"
OK

redis> MSET google "google.com"
OK

redis> GET google
"google.com"

set SET key value [EX seconds] [PX milliseconds] [NX|XX]
文字列値valueをkeyに関連付けます.
keyがすでに他の値を持っている場合は、setは古い値を上書きし、タイプを無視します.
元々生存時間(TTL)を持つキーの場合、[SET]コマンドがこのキーで正常に実行されると、このキーの元のTTLはクリアされます.
戻り値:
Redis 2.6.12リリース以前は、SETコマンドは常にOKを返していました.
Redis 2.6.12以降、SETは設定操作が正常に完了したときにOKを返します.
XXが設定されているが、条件が満たされていないために設定操作が実行されていない場合、コマンドは空の一括返信(NULL Bulk Reply)を返します.
#           

redis 127.0.0.1:6379> SET key "value"
OK

redis 127.0.0.1:6379> GET key
"value"


#           

redis 127.0.0.1:6379> SET key "new-value"
OK

redis 127.0.0.1:6379> GET key
"new-value"


#    EX   

redis 127.0.0.1:6379> SET key-with-expire-time "hello" EX 10086
OK

redis 127.0.0.1:6379> GET key-with-expire-time
"hello"

redis 127.0.0.1:6379> TTL key-with-expire-time
(integer) 10069


#    PX   

redis 127.0.0.1:6379> SET key-with-pexpire-time "moto" PX 123321
OK

redis 127.0.0.1:6379> GET key-with-pexpire-time
"moto"

redis 127.0.0.1:6379> PTTL key-with-pexpire-time
(integer) 111939


#    NX   

redis 127.0.0.1:6379> SET not-exists-key "value" NX
OK      #     ,    

redis 127.0.0.1:6379> GET not-exists-key
"value"

redis 127.0.0.1:6379> SET not-exists-key "new-value" NX
(nil)   #      ,    

redis 127.0.0.1:6379> GEt not-exists-key
"value" #       


#    XX   

redis 127.0.0.1:6379> EXISTS exists-key
(integer) 0

redis 127.0.0.1:6379> SET exists-key "value" XX
(nil)   #       ,    

redis 127.0.0.1:6379> SET exists-key "value"
OK      #         

redis 127.0.0.1:6379> SET exists-key "new-value" XX
OK      #       

redis 127.0.0.1:6379> GET exists-key
"new-value"


# NX   XX     EX    PX     

redis 127.0.0.1:6379> SET key-with-expire-and-NX "hello" EX 10086 NX
OK

redis 127.0.0.1:6379> GET key-with-expire-and-NX
"hello"

redis 127.0.0.1:6379> TTL key-with-expire-and-NX
(integer) 10063

redis 127.0.0.1:6379> SET key-with-pexpire-and-XX "old value"
OK

redis 127.0.0.1:6379> SET key-with-pexpire-and-XX "new value" PX 123321
OK

redis 127.0.0.1:6379> GET key-with-pexpire-and-XX
"new value"

redis 127.0.0.1:6379> PTTL key-with-pexpire-and-XX
(integer) 112999


# EX   PX       ,                  

redis 127.0.0.1:6379> SET key "value" EX 1000 PX 5000000
OK

redis 127.0.0.1:6379> TTL key
(integer) 4993  #    PX       

redis 127.0.0.1:6379> SET another-key "value" PX 5000000 EX 1000
OK

redis 127.0.0.1:6379> TTL another-key
(integer) 997   #    EX