NoSQLデータベースのRedisデータベース管理(Stringタイプとhashタイプ)


一.Redisのデータ型
1.Stringタイプと操作
Stringは最も簡単なタイプで、keyはvalueに対応し、stringタイプはバイナリで安全です.Redisのstringは、jpgピクチャやシーケンス化されたオブジェクトなどの任意のデータを含んでもよい.
Setメソッド:キーに対応する値をstringタイプのvalueに設定
たとえば、name=lililiのキー値ペアを追加します.
redis 127.0.0.1:6379> set name lili
OK

Setnx:keyに対応する値をstringタイプのvalueに設定し、keyがすでに存在する場合は0を返し、nxはnot existという意味です.
たとえば、name=lili_を追加します.newのキー値ペア.
redis 127.0.0.1:6379> get name
"lili"
redis 127.0.0.1:6379> setnx name lili_new
(integer) 0
redis 127.0.0.1:6379> get name
"lili"
redis 127.0.0.1:6379> setnx age 20
(integer) 1

Setex:keyに対応する値をstringタイプのvalueに設定し、このキー値に対応する有効期間を指定します.
たとえば、haircolor=redのキー値ペアを追加し、有効期間を10秒と指定します.
redis 127.0.0.1:6379> setex haircolor 10 red
OK
redis 127.0.0.1:6379> get haircolor
"red"
redis 127.0.0.1:6379> get haircolor
(nil)

nil:空を表す
Setrange:指定keyのvalue値を設定するサブストリング
たとえば、liliの126メールボックスをgmailメールボックスに置き換えたい場合
redis 127.0.0.1:6379> get name
"[email protected]"
redis 127.0.0.1:6379> setrange name 6 gmail.com
(integer) 14
redis 127.0.0.1:6379> get name
"[email protected]"

redis 127.0.0.1:6379> set email [email protected]
OK
redis 127.0.0.1:6379> get email
"[email protected]"
redis 127.0.0.1:6379> setrange email 6-li-jie.me
(integer) 21
redis 127.0.0.1:6379> get email
"[email protected]"

mset:一度に複数のkeyの値を設定し、OKを正常に返すとすべての値が設定され、0を返すと設定されていないことを示します.
redis 127.0.0.1:6379> mset key1 lijie1 key2 lijie2
OK
redis 127.0.0.1:6379> get key1
"lijie1"
redis 127.0.0.1:6379> get key2
"lijie2"

msetnx:一度に複数のkeyの値を設定し、OKを正常に返すとすべての値が設定され、0を返すと設定されていないが、既存のkeyを上書きしないことを示します.
redis 127.0.0.1:6379> msetnx key3 lijie3 key2 30
(integer) 0
redis 127.0.0.1:6379> get key3
(nil)
redis 127.0.0.1:6379> msetnx key3 lijie3 key4 30
(integer) 1
redis 127.0.0.1:6379> get key3
"lijie3"
redis 127.0.0.1:6379> get key4
"30"

get:keyに対応するstring値を取得し、keyが存在しない場合はnilを返します.
getset:keyの値を設定し、keyの古い値を返します.
redis 127.0.0.1:6379> getset key4 40
"30"
redis 127.0.0.1:6379> get key4
"40"

getrange:keyのvalue値を取得するサブ文字列.
redis 127.0.0.1:6379> get email
"[email protected]"
redis 127.0.0.1:6379> getrange email 0 4
"lijie"

mget:複数のkeyの値を一度に取得し、対応するkeyが存在しない場合はnilを返す.
redis 127.0.0.1:6379> mget key1 key2 key3
1) lijie1
2) lijie2
3) lijie3

incr:keyの値を加算し、新しい値を返します.
redis 127.0.0.1:6379> incr key4
(integer) 41
redis 127.0.0.1:6379> incr key4
(integer) 42
redis 127.0.0.1:6379> get key4
"42"

redis 127.0.0.1:6379> incr key7
(integer) 1
redis 127.0.0.1:6379> incr key7
(integer) 2
redis 127.0.0.1:6379> get key7
"2"

incrby:incrと同様に、指定値を加えると、keyが存在しない場合にkeyが設定され、元のvalueは0とみなされます.
redis 127.0.0.1:6379> incrby key4 5
(integer) 47
redis 127.0.0.1:6379> get key4
"47"
redis 127.0.0.1:6379> incrby key4 -5
(integer) 42
redis 127.0.0.1:6379> get key4
"42"

decr:keyの値を減算します.
decrby:decrと同様に、指定値を減らします.
redis 127.0.0.1:6379> get key6
"39"
redis 127.0.0.1:6379> decr key6
(integer) 38
redis 127.0.0.1:6379> decrby key6 -3
(integer) 41
redis 127.0.0.1:6379> decrby key6 3
(integer) 38

append:指定したkeyの文字列にvalueを追加し、新しい文字列値の長さを返します.
redis 127.0.0.1:6379> get name
"test"
redis 127.0.0.1:6379> append name .net
(integer) 8
redis 127.0.0.1:6379> get name
"test.net"

strlen:指定keyのvalue値の長さをとります.
redis 127.0.0.1:6379> strlen name
(integer) 8

 
2.hashタイプと操作
Redis hashはstringタイプのfieldとvalueのマッピングテーブルです.その追加、削除操作はいずれも0(1)(平均)です.hashは特にオブジェクトを格納するのに適している.オブジェクトの各フィールドを単一stringタイプに保存するよりも.1つのオブジェクトをhashタイプに格納すると、より少ないメモリが消費され、オブジェクト全体へのアクセスが容易になります.
hset:hash fieldを指定値に設定し、keyが存在しない場合は作成します.
redis 127.0.0.1:6379> hset user:001 name lijie
(integer) 1
redis 127.0.0.1:6379> hget user:001 name
"lijie"

hsetnx:hash fieldを指定値に設定し、keyが存在しない場合は作成します.存在する場合は0を返します.
redis 127.0.0.1:6379> hsetnx user:002 name lamp
(integer) 1
redis 127.0.0.1:6379> hget user:002 name
"lamp"
redis 127.0.0.1:6379> hsetnx user:002 name lampbrother
(integer) 0
redis 127.0.0.1:6379> hget user:002 name
"lamp"

hmset:hashの複数のfieldを同時に設定します.
redis 127.0.0.1:6379> hmset user:003 name lijie age 20 sex 1
OK
redis 127.0.0.1:6379> hget user:003 name
"lijie"
redis 127.0.0.1:6379> hget user:003 age
"20"
redis 127.0.0.1:6379> hget user:003 sex
"1"

hget:指定したhash fieldを取得します.
hmget:指定したhash fieldをすべて取得します.
redis 127.0.0.1:6379> hmget user:003 name age sex
1) "lijie"
2) "20"
3) "1"

hincrby:指定したhash fieldに所定の値を加算します.
redis 127.0.0.1:6379> hincrby user:003 age 5
(integer) 25
redis 127.0.0.1:6379> hget user:003 age
"25"

hexists:fieldが存在するかどうかをテストします.
redis 127.0.0.1:6379> hexists user:003 age
(integer) 1
redis 127.0.0.1:6379> hexists user:001 sex
(ingeger) 0

hlen:指定したhashのfield数を返します.
redis 127.0.0.1:6379> hlen user:001
(integer) 1
redis 127.0.0.1:6379> hlen user:003
(integer) 3

hdel:指定hashのfieldを削除する
redis 127.0.0.1:6379> hget user:003 age
"25"
redis 127.0.0.1:6379> hdel user:003 age
(integer) 1
redis 127.0.0.1:6379> hget user:003 age
(nil)

hkeys:hashのすべてのfieldを返します
redis 127.0.0.1:6379> hkeys user:001
1) "name"
redis 127.0.0.1:6379> hkeys user:003
1) "name"
2) "sex"

hvals:hashのすべてのvalueを返します.
redis 127.0.0.1:6379> hvals user:003
1) "lijie"
2) "1"

hgetall:hashのすべてのfieldとvalueを取得する
redis 127.0.0.1:6379> hgetall user:003
1) "name"
2) "lijie"
3) "sex"
4) "1"

 
説明:本文は私のネット上でLAMP兄弟連李捷先生の《NoSQLデータベースのRedisデータベース管理》の学習ノートを勉強します.