Redisデータ型とアクション
10588 ワード
この例はredis単一インスタンスモードです
基本データ型
String:最も一般的なデータ型 String文字列を保存する以外に、多くの特殊なタイプを保存することができ、シーケンス化後に画像、オブジェクト、数値 を保存することができる.
Hash --key value Mapタイプ List--チェーンテーブル String をチェーンテーブル形式で格納する.
セットは、String を集合的に記憶する.
ZSet--整列集合は、 をscoreサイズ順に配列する.
文字列の基本操作 set get setnx keyが存在する場合は設定しません.は、0 を返します. setexメモリ値の設定の有効期限 setnxは、分散ロックとして使用することができる.指定したkeyに対して、スレッドがロックを取得するときにsetnxを行い、設定に成功すればロックを取得します.操作は削除を終了します.終了していない場合.他のスレッドsetnxは失敗します. setrange置換文字列 mset or msetnx多値格納 mget多値取得 getset古い値を取得して新しい値 に格納 incr、decrデジタルタイプ自増自減+1- incrby、decrbyカスタムの数値増減.小数はincrbyfloatを増加しますが、小数を減らしてdecrbyfloatがないincrbyfloat key-1.5は負数 でしかありません. append追加文字列append key 1 world strlen文字列長strlen key 1 を取得
Hashタイプ操作
redisで最も一般的なタイプは、1つのhash idの下で複数のkey valueに対応し、メモリ容量を節約します.オブジェクトを格納するのに適しています. hset
これで{"name":"zhangsan","age":1}のオブジェクトが追加されます.彼らが対応するkeyは「key 1」 hget hmset、hmgetマルチパラメータ値の入力と取得 hsetnx keyで既に存在するパラメータは更新されません hincrby加(減)法操作hincrbyfloat浮動小数点型操作 hexistsが存在するかどうか hlenオブジェクトのキー値の数 hdel指定したfield hkeys表示オブジェクトのすべてのfieldを削除するkey hvals表示オブジェクト内のすべてのfieldのvalue hgetallすべてのfieldのkey value を取得
Listタイプ操作
削除要素を両端に追加できる秩序化された文字列チェーンテーブルを格納するため、スタックとしてもキューとしても使用できます.スタック(先進後出):lpush+lpop rpush+rpop;キュー(先進先出)lpush+rporpush+lpopは、Redisのlistのデータ型特性やメモリライブラリの効率的な特性のため、メッセージキュー(MQ)として使用できる. lpushは頭部から元素を加え、先進的に後出する.rpopを併用すれば先進的な先発も実現できるので相対的である.
他のrとlの組合せは、上記の試験法である. lrange左から右にリストを表示します.rrange法がない linsert挿入操作、要素の前(before)または後(after)挿入 を指定できます. lset置換指定下付き要素 lrm要素を削除します.削除された個数 を返します. ltrim切り取りキュー lpop rpopは、ヘッダ、テールからデータを削除する、削除されたデータ を返す. rpoplpush削除と追加操作を1つにして、popから出た要素を新しいキューに追加することができます.単独で使用するよりも安全な原子化操作です.使用シーン:1.同じキューでヘッダとテールの交換が可能で、すべてを交換するのは1回の遍歴に相当します.例えば、ipアドレスの列が格納されており、いずれも利用可能かどうかの判断を行いたい.2.あるキューpopから別のキューにpushを出すと、popから出た要素がトランザクションに失敗する可能性があります.この場合、別のキューに行って元の要素を取り戻して遡及することができます. lindexはindexの位置の要素 を返します. llenは、要素の個数 を返します.
Setタイプアクション
Stringタイプの無秩序の集合とlistの違い:list秩序、set無秩序、list繰り返し可能、set繰り返し不可、redisのsetはhashtableによって実現される.シーンの使用:アクセス者ipを格納するなどの統計により、アクセス量(scard)を統計できます.交差(sinter)共通の友人、共通の関心者を見る. sadd追加要素 smembers setの要素 を表示 srem削除要素 spopはランダムに削除され、削除された要素 を返します. sinter,sunionは集合の交差を取り, を集める. sdiff差セット sdiffstore、sinterstore、sunionstoreは、戻り結果を新しいセットに 格納します. smoveは、実質的にsremおよびsaddの原子化動作 である1つのsetから元素を除去して別のsetに追加する. scard、smembers、sismember要素の個数を表示し、すべての要素を表示し、ある要素が存在するかどうか srandmemberランダムに要素を取り出しますが、 は削除しません.
ZSET秩序集合
hashテーブルとskiplistを使用して実装します.挿入と検索が高速です.指定したscoreサイズでソートします.スコア順位のソートが必要なシーンで使用できます.例えば、試験順位、サイト順位(検索のソート)、タイムスタンプをscore(時間順のデータ)、ユーザーの個人化興味ラベルとする zaddはsetの挿入より1つの点数を多くした.このスコアの大きさで を並べ替えます.既存の要素zaddに対する修正可能な順序 zadd set 1 nx 20 ddd既存の要素 は更新されません. zadd set 1 xx 20 dddは存在しない要素 を更新しない. zadd set 1 ch 30 aaaは変化する要素の個数を返してchを加えないで返してすべて0 です zadd set 1 incr 5 aaa aaa対aaa 5分 zrem削除要素 zrangebyscore指定スコア区間ルックアップ要素 zrevrange set 1 0-1 withscores逆シーケンス検索要素 zrankは、スコアを表示するのではなく、0から始まる の要素の順位を表示します. zremrangebyrank要素 をランキング順に削除 zremrangebyscoreスコア番号で を削除 zcardは、集合内のすべての要素の個数 を返します. zcount set 1 5 10所与のスコア区間内の要素個数 テクニックと構成の最適化 redisメモリを節約します.数が少ない場合、Hashタイプはredis内部でziplistに変換されます.hashmapではありません.redis.confのデフォルトhash-maxは512に設定されています.デフォルトの2倍 に設定可能 1 1千万人以上のユーザデータを格納する必要がある場合、1つのhash keyに複数のユーザを格納すると、より多くのスペースを節約できます.
以上のように.hashkeyには999人のユーザーが保存できます
基本データ型
String:最も一般的なデータ型
Hash --key value
セット
ZSet--整列集合
help @string
コマンドを使用すると、すべてのString関連アクションコマンドを表示できるように、すべてのアクションコマンドの説明をredis-cliで表示できます.help set
を使用してsetコマンドの使用方法と説明を表示文字列の基本操作
> set key1 value1
OK
> get key1
"value1"
> setnx key1 valuenx
(integer)0
> setnx key2 value2
(integer)1
> setex key3 60 value3 //60
(integer)1
> ttl key3 //
(integer)40
> get key3 //60
(nil) //
> set email [email protected]
> setrange email 8 $ // $ ( 0 )
> get email
"maven163$163.com"
> FLUSHALL // key
OK
> mset key1 value1 key2 value2 key3 value3
OK
> keys *
1) "key1"
2) "key2"
3) "key3"
> mget key1 key2 key3
1) "value1"
2) "value2"
3) "value3"
> getset key1 newvalue
"value1"
> get key1
"newvalue"
> set key1 100 // , ,
OK
> incr key1
"101"
> decr key1
"100"
> incrby key1 2
"102"
> decrby key1 3
"99"
Hashタイプ操作
redisで最も一般的なタイプは、1つのhash idの下で複数のkey valueに対応し、メモリ容量を節約します.オブジェクトを格納するのに適しています.
> hset key1 name zhangsan
(integer)1
> hset key1 age 18
(integer)1
これで{"name":"zhangsan","age":1}のオブジェクトが追加されます.彼らが対応するkeyは「key 1」
> hget key1 name
"zhangsan"
> hget key1 age
"18"
> hmset key1 sex nan addr hangzhou
OK
> hmget key1 name sex age addr
1) "zhangsan"
2) "nan"
3) "18"
4) "hangzhou"
> hsetnx key1 name lisi
(integer)0 // 0.
> hget key1 name
"zhangsan" // name, zhangsan
> hincrby key1 age 2 // 2
(integer)20
> hincrby key1 age -2 // 2
(integer)18
> hexists key1 name
(integer)1
> hexists key1 weight
(integer)0
> hlen key1
(integer)4
> hkeys key1 // field
1) "name"
2) "age"
3) "sex"
4) "addr"
> hdel key1 addr //
(integer)1
> hkeys key1 // field
1) "name"
2) "age"
3) "sex"
> hvals key1
1) "zhangsan"
2) "20.5"
3) "nan"
> hgetall key1
1) "name"
2) "zhangsan"
3) "age"
4) "20.5"
5) "sex"
6) "nan"
Listタイプ操作
削除要素を両端に追加できる秩序化された文字列チェーンテーブルを格納するため、スタックとしてもキューとしても使用できます.スタック(先進後出):lpush+lpop rpush+rpop;キュー(先進先出)lpush+rporpush+lpopは、Redisのlistのデータ型特性やメモリライブラリの効率的な特性のため、メッセージキュー(MQ)として使用できる.
> lpush list1 hello
(integer) 1
> lpush list1 world
(integer) 2
> lrange list1 0 -1 // 。
1) "world"
2) "hello"
> lpop list1
"world" // "world"
>lpop list1
"hello"
他のrとlの組合せは、上記の試験法である.
> rpush list1 hello
(integer) 1
> rpush list1 world
(integer) 2
> lrange list1 0 -1 // list1
1) "hello"
2) "world"
> lrange list1 -2 -1 //list -3 -2 -1
1) "hello"
2) "world"
> linsert list1 before world my // world my
(integer) 3
> lrange list1 0 -1
1) "hello"
2) "my"
3) "world"
>lrm list1 0 a // a
>lrm list1 2 a // a
>lrm list1 -2 a // a
> ltrim list1 0 1 // 。
> lrange list1 0 -1
1) "a"
2) "my"
> rpoplpush list1 list1 //
"my"
> lrange list1 0 -1 //rpoplpush 。
1) "my"
2) "a"
> lindex list1 0
"my"
> llen list1
(integer) 2
Setタイプアクション
Stringタイプの無秩序の集合とlistの違い:list秩序、set無秩序、list繰り返し可能、set繰り返し不可、redisのsetはhashtableによって実現される.シーンの使用:アクセス者ipを格納するなどの統計により、アクセス量(scard)を統計できます.交差(sinter)共通の友人、共通の関心者を見る.
> sadd set1 aaa bbb ccc // set1
(integer) 3
> sadd set2 aaa bbb bbb // ,
(integer) 2
> SMEMBERS set2
1) "bbb"
2) "aaa"
> srem set1 aaa
(integer) 1
> sinter set1 set2
1) "bbb"
> sunion set1 set2
1) "ccc"
2) "aaa"
3) "bbb"
> SMEMBERS set1
1) "ccc"
2) "bbb"
> SMEMBERS set2
1) "bbb"
2) "aaa"
> sdiff set1 set2 //sdiff (set1) , (set2) 。
1) "ccc"
> sdiff set2 set1
1) "aaa"
> sdiffstore setdiff set1 set2
(integer) 1
> SMEMBERS setdiff
1) "ccc" //sdiffstore
> sinterstore setinter set1 set2
(integer) 1
> SMEMBERS setinter
1) "bbb" //sinterstore
> sunionstore setunion set1 set2
(integer) 3
> SMEMBERS setunion
1) "ccc"
2) "aaa"
3) "bbb" //sunionstore
> smove set1 set2 ccc
(integer) 1
> SMEMBERS set1
1) "bbb"
> SMEMBERS set2
1) "ccc"
2) "bbb"
3) "aaa"
> scard set2
(integer) 3
> smembers set2
1) "ccc"
2) "bbb"
3) "aaa"
> sismember set2 aaa
(integer) 1
ZSET秩序集合
hashテーブルとskiplistを使用して実装します.挿入と検索が高速です.指定したscoreサイズでソートします.スコア順位のソートが必要なシーンで使用できます.例えば、試験順位、サイト順位(検索のソート)、タイムスタンプをscore(時間順のデータ)、ユーザーの個人化興味ラベルとする
> zadd set1 1 aaa 2 bbb 3 ccc //1 aaa 2 bbb 3 ccc
(integer) 3
> ZRANGE set1 0 -1 //
1) "aaa"
2) "bbb"
3) "ccc"
> ZRANGE set1 0 -1 withscores // ,
1) "aaa"
2) "1"
3) "bbb"
4) "2"
5) "ccc"
6) "3"
> zadd set1 0 ccc //ccc 0
(integer) 0
> ZRANGE set1 0 -1
1) "ccc" //ccc
2) "aaa"
3) "bbb"
> zadd set1 ch 30 aaa
(integer) 1
> zadd set1 incr 5 aaa
"35"
> zrem set1 aaa
(integer) 1
> ZRANGE set1 0 -1
1) "ccc"
2) "bbb"
> zrangebyscore set1 0 100
1) "ccc"
2) "bbb"
> zrangebyscore set1 0 0
1) "ccc"
> zrange set1 0 -1 withscores //
1) "ccc"
2) "0"
3) "bbb"
4) "2"
> zrevrange set1 0 -1 withscores //
1) "bbb"
2) "2"
3) "ccc"
4) "0"
> zrank set1 bbb
(integer) 1
> zrank set1 ccc
(integer) 0
> ZREMRANGEBYRANK set1 0 1 //
(integer) 2
> zadd set1 5 aaa 6 bbb 7 ccc //
(integer) 3
> zremrangebyscore set1 0 6 // 0 6
(integer) 2
> zrange set1 0 -1
1) "ccc" // ccc 5 6
> zcard set1
(integer) 1
hash-max-ziplist-entries 1024
hash-max-ziplist-value 128
>hset 10000 001 userinfo
>hset 10000 002 userinfo
以上のように.hashkeyには999人のユーザーが保存できます