Redisノートとまとめ2 StringタイプとHashタイプ
31026 ワード
Linux :
cat /etc/issue cat /etc/redhat-release(Linux )
CentOS release 6.6 (Final)
(一)Stringタイプ
【定義】stringは最も簡単なタイプであり、Memcachedと同じタイプであり、keyはvalueに対応し、サポートされている操作はMemcachedの操作と類似していると理解できます.しかし、その機能はもっと豊富です.
stringタイプはバイナリで安全です.redisのstringは、jpgピクチャやシーケンス化されたオブジェクトなどの任意のデータを含んでもよいことを意味する.内部実装からstringはbyte配列と見なすことができ,最大上限は1 Gバイトである.
【操作】
①setメソッド
keyに対応する値をstringタイプのvalueに設定します.
【例】name=deeのキー値ペアを追加する:
127.0.0.1:6379> set name dee
OK
設定に成功しました.
②getメソッド
【例】
127.0.0.1:6379> get name
"dee"
取得に成功しました.
名前=deathmaskを再度設定すると、値が上書きされます.
127.0.0.1:6379> set name deathmask
OK
127.0.0.1:6379> get name
"deathmask"
③setnxメソッド
キーに対応する値をstringタイプのvalueに設定し、キーがすでに存在する場合は0を返し、nxはnot existを表します.
【例】
127.0.0.1:6379> setnx name dee
(integer) 0
127.0.0.1:6379> setnx app weibo
(integer) 1
127.0.0.1:6379> get name
"deathmask"
127.0.0.1:6379> get app
"weibo"
nameが既に存在し、変更されていないことを示し、appが存在しない場合はsetに成功します.
④setexメソッド
キーに対応する値をstringタイプのvalueに設定し、このキー値に対応する有効期間を指定します.
【例】
127.0.0.1:6379> setex mobile 10 iphone
OK
127.0.0.1:6379> get mobile
"iphone"
127.0.0.1:6379> get mobile
"iphone"
127.0.0.1:6379> get mobile
(nil)
Mobileの値をiPhoneに設定し、有効期間を10秒に指定します.
⑤setrangeメソッド
キーのvalue値を指定するサブ文字列を設定
【例】deeの126メールボックスをgmailメールボックスに置き換える
127.0.0.1:6379> set email dee@126.com
OK
127.0.0.1:6379> get email
"[email protected]"
127.0.0.1:6379> setrange email 4 gmail.com
(integer) 13
127.0.0.1:6379> get email
"[email protected]"
ここで、4は下付き文字列を表し、13は文字列の長さを表す.
【例2】
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 4 gmail.com
(integer) 16
127.0.0.1:6379> get email
"[email protected]"
説明:置換された文字列にアクティブな文字列がない場合は、ソース文字列の同じ長さの文字のみが置換され、ソース文字列の残りの文字が保持されます.
⑥msetメソッド
一度に複数のkey値を設定し、OKを正常に返し、すべての値が設定されていることを示し、失敗して0を返し、設定されていないことを示します.
【例】
127.0.0.1:6379> mset key1 dee1 key2 dee2
OK
127.0.0.1:6379> get key1
"dee1"
127.0.0.1:6379> get key2
"dee2"
⑦msetnxメソッド
一度に複数のkeyの値を設定し、1を正常に返し、すべての値が設定されていることを示します.失敗は0を返し、設定された値はありませんが、既存のkeyは上書きされません.
127.0.0.1:6379> msetnx key3 dee3 key4 dee4
(integer) 1
127.0.0.1:6379> msetnx key3 dee333 key4 dee444 key5 dee5
(integer) 0
127.0.0.1:6379> get key3
"dee3"
127.0.0.1:6379> get key4
"dee4"
127.0.0.1:6379> get key5
(nil)
⑧getsetメソッド
キーの値を設定し、キーの古い値を返します.
【例】
127.0.0.1:6379> getset key1 emperor
"dee1"
⑨getrangeメソッド
keyのvalue値のサブ文字列を取得します.
127.0.0.1:6379> get email
"[email protected]"
127.0.0.1:6379> getrange email 0 12
"[email protected]"
0~12文字目を返します.
⑩mget方法
複数のkeyの値を一度に取得し、対応するkeyが存在しない場合はnilを返す.
【例】
127.0.0.1:6379> mget key1 key2 key3 key4 key5
1) "emperor"
2) "dee2"
3) "dee3"
4) "dee4"
5) (nil)
⑪incrメソッドはkeyの値を加算し、新しい値を返します.
【例】毎回1ずつ増加
127.0.0.1:6379> set age 28
OK
127.0.0.1:6379> get age
"28"
127.0.0.1:6379> incr age
(integer) 29
127.0.0.1:6379> incr age
(integer) 30
127.0.0.1:6379> get age
"30"
【例2】
127.0.0.1:6379> get real-age
(nil)
127.0.0.1:6379> incr real-age
(integer) 1
127.0.0.1:6379> get real-age
"1"
⑪incrbyメソッド
incrメソッドと同様に、指定値を加えると、keyが存在しない場合にkeyが設定され、元のvalueは0とみなされます.
【例】
127.0.0.1:6379> get times
(nil)
127.0.0.1:6379> incrby times 5
(integer) 5
127.0.0.1:6379> get times
"5"
【例2】
127.0.0.1:6379> incrby times -5
(integer) 0
127.0.0.1:6379> get times
"0"
⑪decrメソッド
keyの値を減算します.
⑪decrbyメソッド
decrメソッドと同様に、指定値を減らします.
【例】
127.0.0.1:6379> get age
"30"
127.0.0.1:6379> decr age
(integer) 29
127.0.0.1:6379> decrby age 10
(integer) 19
127.0.0.1:6379> decrby age -10
(integer) 29
⑪appendメソッド(重要)
指定したkeyの文字列にvalueを追加し、新しい文字列の長さを返します.
【例】
127.0.0.1:6379> get name
"deathmask"
127.0.0.1:6379> append name @163.com
(integer) 17
127.0.0.1:6379> get name
"[email protected]"
⑯strlenメソッド
指定したkeyのvalue値の長さをとります.
【例】
127.0.0.1:6379> get name
"[email protected]"
127.0.0.1:6379> strlen name
(integer) 17
(二)Hashタイプ
Redis hashはstringタイプのfieldとvalueのマッピングテーブルです.その追加、削除操作はいずれも0(1)(平均操作)である.
hashは特にオブジェクトを格納するのに適している.オブジェクトの各フィールドを単一stringタイプとして保存するよりも(stringタイプはオブジェクトシーケンス化を格納できます).
1つのオブジェクトをhashタイプに格納すると、より少ないメモリが消費され、オブジェクト全体へのアクセスが容易になります.
(メモリを節約する理由は、hashオブジェクトを新規作成するときからzipmap(small hashとも呼ばれる)で格納されるためです.
このzipmapは実際にはhash tableではありませんが、zipmapは通常のhash実装よりもhash自体に必要なメタデータストレージのオーバーヘッドを節約することができます.
zipmapの追加、削除、検索はすべてO(n)ですが、一般的なオブジェクトのfield数はあまり多くないので、zipmapを使うのも速いです.つまり、追加削除の平均はO(1)です.
フィールドまたはvalueの大きさが一定の制限を超えると、Redisは内部でzipmapを正常なhashに自動的に置き換える実現する.この制限はプロファイルで指定できます.
hash-max-zipmap-entries 64#構成フィールドは最大64個、hash-max-zipmap-value 512#構成valueは最大512バイト)
【操作】
①hsetメソッド/hgetメソッド
hash fieldを指定値に設定し、keyが存在しない場合は作成します.
【例】
127.0.0.1:6379> hset myhash field1 hello
(integer) 1
説明:myhashはhashテーブルの名前で、field 1はhashテーブルのフィールドで、helloはこのフィールドに対応する値です.ストレージユーザーの方が便利です.
【例2】
127.0.0.1:6379> hset user:001 name dee
(integer) 1
127.0.0.1:6379> hget user:001 name
"dee"
説明:userテーブルidが001のユーザー、ユーザー名がdeeに設定されます.
user:001をテーブルと見なすことができます.
②hsetnxメソッド
hash fieldを指定値に設定し、keyが存在しない場合は先に作成します.存在する場合は0を返します.
【例】
127.0.0.1:6379> hsetnx myhash field "hello"
(integer) 1
127.0.0.1:6379> hsetnx myhash field "hello!"
(integer) 0
127.0.0.1:6379> hget myhash field
"hello"
③hmsetメソッド
hashの複数のfieldを同時に設定する
【例】
127.0.0.1:6379> hmset user:002 name dee specialty php
OK
127.0.0.1:6379> hget user:002 name
"dee"
127.0.0.1:6379> hget user:002 specialty
"php"
④hgetメソッド
指定したhash fieldをすべて取得します.
【例】
127.0.0.1:6379> hmget user:002 name specialty
1) "dee"
2) "php"
⑤hincrbyメソッド
指定したhash fieldに所定の値を加算します.
【例】
127.0.0.1:6379> hmset user:002 name dee specialty redis age 28
OK
127.0.0.1:6379> hincrby user:002 age -6
(integer) 22
127.0.0.1:6379> hmget user:002 name specialty age
1) "dee"
2) "redis"
3) "22"
127.0.0.1:6379> hincrby user:002 age 5
(integer) 27
127.0.0.1:6379> hmget user:002 name specialty age
1) "dee"
2) "redis"
3) "27"
⑥hexistsメソッド
テストfieldが存在するかどうかを指定します.
【例】
127.0.0.1:6379> hexists user:002 name
(integer) 1
127.0.0.1:6379> hexists user:002 sex
(integer) 0
⑦hlenメソッド
指定したhashのfield数を返します.
【例】
127.0.0.1:6379> hlen user:002
(integer) 3
⑧hdelメソッド
指定したhashのfieldを削除します.
【例】
127.0.0.1:6379> hdel user:002 age
(integer) 1
127.0.0.1:6379> hget user:002 age
(nil)
⑨hkeys法(PHPにおけるarray_keys()法に類似)
hashのすべてのfieldを返します.
【例】
127.0.0.1:6379> hkeys user:002
1) "name"
2) "specialty"
⑩hvalsメソッド(PHPのarray_values()メソッドに類似)
hashのすべてのvalueを返します.
【例】
127.0.0.1:6379> hvals user:002
1) "dee"
2) "redis"
⑪hgetallメソッド
あるhashのすべてのfieldとvalueを取得します.
【例】
127.0.0.1:6379> hgetall user:002
1) "name"
2) "dee"
3) "specialty"
4) "redis"
【まとめ】hashタイプのデータを設定し、まずhashのテーブルを設定し、次にhashのfieldを設定し、最後にhash fieldのvalueを設定します.