Redisベース・データ型とベース・データ型に関するアクション

7695 ワード


Redisは、単純なkey-valueストレージではなく、データ構造タイプのサーバです.Redis内のキーはバイナリ・セキュリティ(バイナリ・セキュリティとは、データの伝送中にデータのセキュリティを保証し、暗号化などを含む)であるため、キーの内容にスペースや改行文字を含めるべきではない.例えば「hello world」と「hello world」は間違っています.
 
文字列タイプ
これは最も簡単なredisデータ型で、このデータ型だけを使用する場合、Redisは永続的なストレージ機能を持つmemcachedサーバと似ています.Redisでは、最大1 GBまでの値を持つことができるので、画像などのコンテンツをキャッシュすることができます.SET操作、GET操作は基本的な記憶と読み取り操作であり、INCRコマンドは値を1から増加することができる.
 
Redisはバイナリ・セキュリティの文字列を格納でき、最大長は1 GBです.
redis 127.0.0.1:6379> SET name "John Doe"
OK
redis 127.0.0.1:6379> GET name
"John Doe"

Stringタイプでは、一括読み書きもサポートされています
redis 127.0.0.1:6379> MSET age 30 sex "male"
OK
redis 127.0.0.1:6379> MGET age sex
1) "30"
2) "male"

Stringタイプは、実際には数値を格納し、数値の増減操作をサポートするためにも使用できます.
redis 127.0.0.1:6379> INCR age
(integer) 31
redis 127.0.0.1:6379> INCRBY age 4
(integer) 35
redis 127.0.0.1:6379> GET age
"35"
redis 127.0.0.1:6379> DECR age
(integer) 34
redis 127.0.0.1:6379> DECRBY age 4
(integer) 30
redis 127.0.0.1:6379> GET age
"30"

Stringタイプでは、その部分の変更と取得操作もサポートされています.
redis 127.0.0.1:6379> APPEND name " Mr."
(integer) 12
redis 127.0.0.1:6379> GET name
"John Doe Mr."
redis 127.0.0.1:6379> STRLEN name
(integer) 12
redis 127.0.0.1:6379> SUBSTR name 0 3
"John"

Listタイプ
RedisのListタイプは双方向チェーンテーブルを用いて格納されるため,Listのヘッダにおいても末尾においてもデータを挿入するのにかかる時間は一定である.
 
 
Redisはデータを1つのチェーンテーブルに格納し、このチェーンテーブルを豊富に操作することができます.
redis 127.0.0.1:6379> LPUSH students "John Doe"
(integer) 1
redis 127.0.0.1:6379> LPUSH students "Captain Kirk"
(integer) 2
redis 127.0.0.1:6379> LPUSH students "Sheldon Cooper"
(integer) 3
redis 127.0.0.1:6379> LLEN students
(integer) 3
redis 127.0.0.1:6379> LRANGE students 0 2
1) "Sheldon Cooper"
2) "Captain Kirk"
3) "John Doe"
redis 127.0.0.1:6379> LPOP students
"Sheldon Cooper"
redis 127.0.0.1:6379> LLEN students
(integer) 2
redis 127.0.0.1:6379> LRANGE students 0 1
1) "Captain Kirk"
2) "John Doe"
redis 127.0.0.1:6379> LREM students 1 "John Doe"
(integer) 1
redis 127.0.0.1:6379> LLEN students
(integer) 1
redis 127.0.0.1:6379> LRANGE students 0 0
1) "Captain Kirk"

Redisも多くの修正操作をサポートしています
redis 127.0.0.1:6379> LINSERT students BEFORE "Captain Kirk" "Dexter Morgan"
(integer) 3
redis 127.0.0.1:6379> LRANGE students 0 2
1) "Dexter Morgan"
2) "Captain Kirk"
3) "John Doe"
redis 127.0.0.1:6379> LPUSH students "Peter Parker"
(integer) 4
redis 127.0.0.1:6379> LRANGE students 0 3
1) "Peter Parker"
2) "Dexter Morgan"
3) "Captain Kirk"
4) "John Doe"
redis 127.0.0.1:6379> LTRIM students 1 3
OK
redis 127.0.0.1:6379> LLEN students
(integer) 3
redis 127.0.0.1:6379> LRANGE students 0 2
1) "Dexter Morgan"
2) "Captain Kirk"
3) "John Doe"
redis 127.0.0.1:6379> LREM students 1 "John Doe"
(integer) 1
redis 127.0.0.1:6379> LLEN students
(integer) 1
redis 127.0.0.1:6379> LRANGE students 0 1
1) "Captain Kirk"

 
SETタイプ
RedisのSETsはソートされていないバイナリ文字列セットであり,言い換えれば文字列の無秩序集合である.ハッシュテーブルによって実現されるため,その追加,削除,検索の時間的複雑さはO(1)である.Setは基本的な追加削除操作に加えて,集合の並列集合,交差,差集合が存在する.これらの操作により、SNSやブログの友達推薦、タグなどの機能を簡単に実現できます.
 
 
Redisは、一連の重複しない値を1つのセットに格納することができる
redis 127.0.0.1:6379> SADD birds crow
(integer) 1
redis 127.0.0.1:6379> SADD birds pigeon
(integer) 1
redis 127.0.0.1:6379> SADD birds bat
(integer) 1
redis 127.0.0.1:6379> SADD mammals dog
(integer) 1
redis 127.0.0.1:6379> SADD mammals cat
(integer) 1
redis 127.0.0.1:6379> SADD mammals bat
(integer) 1
redis 127.0.0.1:6379> SMEMBERS birds
1) "bat"
2) "crow"
3) "pigeon"
redis 127.0.0.1:6379> SMEMBERS mammals
1) "bat"
2) "cat"
3) "dog"

Sets構造も対応する修正操作をサポートする
redis 127.0.0.1:6379> SREM mammals cat
(integer) 1
redis 127.0.0.1:6379> SMEMBERS mammals
1) "bat"
2) "dog"
redis 127.0.0.1:6379> SADD mammals human
(integer) 1
redis 127.0.0.1:6379> SMEMBERS mammals
1) "bat"
2) "human"
3) "dog"

Redisはまた,集合に対するサブ交差補完などの操作をサポートする.
redis 127.0.0.1:6379> SINTER birds mammals
1) "bat"
redis 127.0.0.1:6379> SUNION birds mammals
1) "crow"
2) "bat"
3) "human"
4) "pigeon"
5) "dog"
redis 127.0.0.1:6379> SDIFF birds mammals
1) "crow"
2) "pigeon"

 
 
Sorted set
setと同様に文字列の集合であり、異なるのは各要素がdoubleタイプのscoreに関連付けられることである.実装はskip listとhash table,skip listの実装は二重リンクテーブルを用いる.Scoreの主な役割はソートであるため,sorted setは主にインデックスとして用いられる.
 
 
Sorted SetsはSetsと構造が似ていますが、Sorted Setsに存在するデータにはscore属性があり、書き込み時にこのscoreでソートされます.
redis 127.0.0.1:6379> ZADD days 0 mon
(integer) 1
redis 127.0.0.1:6379> ZADD days 1 tue
(integer) 1
redis 127.0.0.1:6379> ZADD days 2 wed
(integer) 1
redis 127.0.0.1:6379> ZADD days 3 thu
(integer) 1
redis 127.0.0.1:6379> ZADD days 4 fri
(integer) 1
redis 127.0.0.1:6379> ZADD days 5 sat
(integer) 1
redis 127.0.0.1:6379> ZADD days 6 sun
(integer) 1
redis 127.0.0.1:6379> ZCARD days
(integer) 7
redis 127.0.0.1:6379> ZRANGE days 0 6
1) "mon"
2) "tue"
3) "wed"
4) "thu"
5) "fri"
6) "sat"
7) "sun"
redis 127.0.0.1:6379> ZSCORE days sat
"5"
redis 127.0.0.1:6379> ZCOUNT days 3 6
(integer) 4
redis 127.0.0.1:6379> ZRANGEBYSCORE days 3 6
1) "thu"
2) "fri"
3) "sat"
4) "sun"

 
 
Hash
Redisのhashはstringタイプのfieldとvalueマッピングテーブルであり,削除を追加する時間の複雑さはO(1)である.オブジェクトを格納するのに適しており、メモリの使用を減らすことができます.メモリ使用量を減らすのは、hashオブジェクトを新規作成するときにzipmapを使用して格納し始めるためです.
 
redis 127.0.0.1:6379> HKEYS student 1) "name" 2) "age" 3) "sex" redis 127.0.0.1:6379> HVALS student 1) "Ganesh" 2) "30" 3) "Male" redis 127.0.0.1:6379> HGETALL student 1) "name" 2) "Ganesh" 3) "age" 4) "30" 5) "sex" 6) "Male" redis 127.0.0.1:6379> HDEL student sex (integer) 1 redis 127.0.0.1:6379> HGETALL student 1) "name" 2) "Ganesh" 3) "age" 4) "30" 

redis 127.0.0.1:6379> HMSET kid name Akshi age 2 sex Female
OK
redis 127.0.0.1:6379> HMGET kid name age sex
1) "Akshi"
2) "2"
3) "Female"