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を設定します.