Redisの各種データタイプ
10506 ワード
Redisの各種データタイプ
redisのデータタイプは集中しています。例えば、string、hash、list、set、sort set、sub/pub。それぞれの中には、インターネット上で多くのアプリケーションシーンがあります。jedisを結合してこれらのデータの種類の使い方とシーンを説明します。
1、ストリングス
stringのデータの種類は[key:value]のキーです。そのkey形式の公式推奨はxxx:xxx:xxxの分類です。javaではJSONツールを通じて、objectのデータをjson文字列に変換して保存できます。値を取る時はobjectオブジェクトに変換します。
コマンド:
Redisのハッシュ値は文字列フィールドと文字列値の間のマッピングであるので、それらはオブジェクトを表す完璧なデータタイプである。Redisのハッシュ値は、400億キーのペアを超えることができる。hashのタイプはオブジェクトに似ています。保存先を変更するたびに、データを全部修正する必要はありません。objectを使ってjson文字列に変換してstringタイプに保存して、毎回修正して全部修正します。
コマンド
Redisリストは簡単な文字列リストで、挿入順序を並べ替えます。頭またはリストの末尾にあるRedisのリストに要素を追加できます。リストの最大長さは232-1の要素です。listは重複可能なペアで複数の場合に使用する。
コマンド
Setタイプは並べ替えられていない文字セットとして見られ、Listが並べ替えられている文字セットと唯一の違いは、Setセットに重複した要素が現れてはいけないことであり、またこれらの動作時間の複雑さはO(1)であり、すなわち定数時間内に操作が完了することである。Setに含まれ得る最大要素数は4294967295である。言い換えれば、Setは同じ要素を複数回追加すると、その要素のコピーの一部のみを保持する。Listタイプと比較して、Setタイプは、unions、intersections、differencesなど、サーバ端で複数のSets間の集約計算動作を行う非常に重要な特性を有している。これらの操作はいずれもサービスエンドで行われているため、効率が非常に高く、ネットワークIOオーバーヘッドも大量に節約されている。例えば、ユーザのアドレス記録、操作記録、文章アクセスユーザの記録などの1対以上のシーンであってもよい。
コマンド
Redis順序セットは、Redisセットと同様に、設定値の一意性に格納される。異なるのは、規則的なセットの各メンバーは、秩序化されたセットコマンドを採用するために、最小から最大までのスコアに関連している点を持つ。Redis順序setを追加し、テスト中のO(1)の存在メンバーを削除します。リストの最大長さは232-1要素(4294967295、4十億円を超える各要素のセット)です。規則的な集合と集合は似ていますが、各valueには一つの点数があります。このタイプの用途は非常に広く、例えばランキング機能、データ記録機能などが必要です。
コマンド
Redisリリース購読(pb/sub)は、メッセージ通信モード:送信者(pb)がメッセージを送信し、購読者(sub)がメッセージを受信する。
コマンド
redisのデータタイプは集中しています。例えば、string、hash、list、set、sort set、sub/pub。それぞれの中には、インターネット上で多くのアプリケーションシーンがあります。jedisを結合してこれらのデータの種類の使い方とシーンを説明します。
1、ストリングス
stringのデータの種類は[key:value]のキーです。そのkey形式の公式推奨はxxx:xxx:xxxの分類です。javaではJSONツールを通じて、objectのデータをjson文字列に変換して保存できます。値を取る時はobjectオブジェクトに変換します。
コマンド:
# 、
>set string:test:1 string1 ->ok
>get string:test:1 ->string1
#
>getrange string:test:1 0 3 ->stri
#
>setrange string:test:1 3 ->7 ( )
>get string:test:1 ->strong1
# ( )
>getset string:test:1 setgetstring1 ->string1
>get string:test:1 ->getsetstring1
#
>mget string:test:1 string:test:2
->getsetstring1
->string2
#
>mset string1 firststring string2 secendstring ->ok
# key
>setex string:test:3 20 string3 ->ok
>ttl string:test:3 ->20
20s
>get string:test:3 ->null
# 、 、
>set string3 22
>incr string3 ->23
>decr string3 ->22
>incrby string3 5 ->27
>decrby string3 5 ->22
#
>set s1 s1
>append s1 s2 -->4
>get s1 ->s1s2
# key
>del string1 ->1
# , ( )
redis:0>setnx s1 s111
1
redis:0>setnx s1 s222
0
Jedis使用: /**
* @see string
*/
@Test
public void stringTest() {
System.out.println(getJedis().set("string1", "string2"));
System.out.print(getJedis().get("string1"));
System.out.println(getJedis().getSet("string1", "string3"));
System.out.println(getJedis().get("string1"));
System.out.println(getJedis().mset("s1", "s1", "s2", "s2", "s3", "s3"));
System.out.println(getJedis().mget("s1", "s2", "s3"));
System.out.println(getJedis().setex("se1", 20, "sn1"));
System.out.println(getJedis().ttl("se1"));
System.out.println(getJedis().get("se1"));
System.out.println(getJedis().set("inc1", "33"));
System.out.println(getJedis().incr("inc1"));
System.out.println(getJedis().decr("inc1"));
System.out.println(getJedis().incrBy("inc1", 5));
System.out.println(getJedis().decrBy("inc1", 5));
System.out.println(getJedis().del("inc1", "s1", "string1", "s2", "s3"));
System.out.println(getJedis().setnx("s1", "s111"));
System.out.println(getJedis().setnx("s1", "s222"));
}
2、shRedisのハッシュ値は文字列フィールドと文字列値の間のマッピングであるので、それらはオブジェクトを表す完璧なデータタイプである。Redisのハッシュ値は、400億キーのペアを超えることができる。hashのタイプはオブジェクトに似ています。保存先を変更するたびに、データを全部修正する必要はありません。objectを使ってjson文字列に変換してstringタイプに保存して、毎回修正して全部修正します。
コマンド
# 、
>hset stest name "h1" -->1
>hget stest name -->h1
# 、
>hmset stext1 name "h2" age 22 cache "trueredis:0>" -->ok
>hmget stext1 name age cache
1) h2
2) 22
3) true
# stext1 hash
>hgetall stext1
1) name
2) h2
3) age
4) 22
5) cache
6) true
# hash
redis:0>hkeys stext1
1) name
2) age
3) cache
#
redis:0>hlen redis:0> stext1
4
# hash value
redis:0>hincrby stext1 age 1
23
#
redis:0>hsetnx stext1 sex male
1
redis:0>hsetnx stext1 sex fredis:0>male
0
# value
redis:0>hvals stext1
1) h2
2) 23
3) true
4) male
ジェーディズ使用 /**
* @see hash
*/
@Test
public void testHash() {
System.out.println(getJedis().hset("st1", "name", "t1"));
System.out.println(getJedis().hget("st1", "name"));
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("age", "22");
hm.put("sex", "male");
hm.put("cache", "true");
System.out.println(getJedis().hmset("st1", hm));
System.out.println(getJedis().hmget("st1", "name", "age", "sex", "cache"));
System.out.println(getJedis().hgetAll("st1"));
System.out.println(getJedis().hkeys("st1"));
System.out.println(getJedis().hlen("st1"));
System.out.println(getJedis().hvals("st1"));
System.out.println(getJedis().hsetnx("st1", "account", "111"));
}
3、リストRedisリストは簡単な文字列リストで、挿入順序を並べ替えます。頭またはリストの末尾にあるRedisのリストに要素を追加できます。リストの最大長さは232-1の要素です。listは重複可能なペアで複数の場合に使用する。
コマンド
# 、
#1、 。( key, key)
redis:0>LPUSH tls t1 ->1
redis:0>LPUSH tls t2 ->2
# , key , 0
redis:0>LPUSHX tls t6 ->6
redis:0>LPUSHX tls1 t7 ->0
#2、
redis:0>RPUSH tls ts7 ->8
#
redis:0>RPUSHX tls rp1 ->9
redis:0>RPUSHX tls1 rp2 ->0
#3、
redis:0>LINSERT tls BEFORE t4 ti4 ->7
、
#1、 , ( )
redis:0>lindex tls 0 -t6
#2、
redis:0>llen tls ->9
#3、 、 ( )
redis:0>LPOP tls -->t6
redis:0>llen tls -->8
#4、 、
redis:0>RPOP tls -->rp1
redis:0>llen tls -->7
、
#1、 list value ,
redis:0>LTRIM tls 0 4 ->OK
redis:0>LLEN tls ->5
#2、
redis:0>LSET tls 0 lst ->OK
、
redis:0>lrange tls 0 -1
1) lst
2) ti4
3) t4
4) t3
5) t2
ジェーディs作用 @Test
public void testList() {
//
System.out.println(getJedis().lpush("list1", "user1"));
System.out.println(getJedis().lpushx("list2", "user1"));
System.out.println(getJedis().lpop("list1"));
//
System.out.println(getJedis().rpush("list1", "user2"));
System.out.println(getJedis().rpushx("list2", "user2"));
System.out.println(getJedis().rpop("list1"));
//
System.out.println(getJedis().linsert("list1", LIST_POSITION.BEFORE, "user2", "user0"));
//
System.out.println(getJedis().lindex("list1", 1));
System.out.println(getJedis().llen("list1"));
//
System.out.println(getJedis().ltrim("list1", 0, 1));
System.out.println(getJedis().lset("list1", 0, "user3"));
}
4、セットSetタイプは並べ替えられていない文字セットとして見られ、Listが並べ替えられている文字セットと唯一の違いは、Setセットに重複した要素が現れてはいけないことであり、またこれらの動作時間の複雑さはO(1)であり、すなわち定数時間内に操作が完了することである。Setに含まれ得る最大要素数は4294967295である。言い換えれば、Setは同じ要素を複数回追加すると、その要素のコピーの一部のみを保持する。Listタイプと比較して、Setタイプは、unions、intersections、differencesなど、サーバ端で複数のSets間の集約計算動作を行う非常に重要な特性を有している。これらの操作はいずれもサービスエンドで行われているため、効率が非常に高く、ネットワークIOオーバーヘッドも大量に節約されている。例えば、ユーザのアドレス記録、操作記録、文章アクセスユーザの記録などの1対以上のシーンであってもよい。
コマンド
# 、 ( )
redis:0>sadd stt a b c -->3
redis:0>sadd stt a b e -->1
# 、
#1、
redis:0>sismember stt a -->1
#2、
redis:0>smembers stt
1) c
2) e
3) a
4) b
#3、set
redis:0>scard stt -->4
#4、
redis:0>srandmember stt -->e
#5、
redis:0>spop stt -->a
redis:0>scard stt -->3
ジェーディs /**
* @see set
*/
@Test
public void testSet() {
//
System.out.println(getJedis().sadd("set1", "1"));
System.out.println(getJedis().sadd("set1", "2"));
System.out.println(getJedis().sadd("set1", "3"));
//
System.out.println(getJedis().sismember("set1", "1"));
System.out.println(getJedis().sismember("set1", "4"));
//
System.out.println(getJedis().scard("set1"));
//
System.out.println(getJedis().srandmember("set1"));
//
System.out.println(getJedis().spop("set1"));
}
5、sort set(重要)Redis順序セットは、Redisセットと同様に、設定値の一意性に格納される。異なるのは、規則的なセットの各メンバーは、秩序化されたセットコマンドを採用するために、最小から最大までのスコアに関連している点を持つ。Redis順序setを追加し、テスト中のO(1)の存在メンバーを削除します。リストの最大長さは232-1要素(4294967295、4十億円を超える各要素のセット)です。規則的な集合と集合は似ていますが、各valueには一つの点数があります。このタイプの用途は非常に広く、例えばランキング機能、データ記録機能などが必要です。
コマンド
、
#1、 :key,score,value
redis:0> ZADD sost 0 -1 --> user1
、
#1、 value score
redis:0>ZINCRBY sost 10 user2 -->15
、
#1、
redis:0>zcard sost -->1
#2、
redis:0>zrange sost 0 -1 withscores
1) user3
2) 2
3) user4
4) 3
5) user2
6) 5
7) user1
8) 555
#3、
redis:0>zcount sost 3 555 -->3
#4、 value ( , )
redis:0>zrank sost user1 -->2
#5、
redis:0>zrevrange sost1 0 -1 withscores
1) user3
2) 4
3) user1
4) 3
5) user2
6) 2
7) user4
8) 1
#6、
redis:0>zscore sost1 user3 -->4
、
#1、
redis:0>ZINTERSTORE sost2 2 sost sost1 -->4
#2、
redis:0>ZUNIONSTORE out 2 sost sost1 WEIGHTS 1 3 -->4
、
# value
redis:0>ZREM sost user1 user2 -->2
ジェーディs /**
* @see sort set
*/
@Test
public void testSortSet() {
//
System.out.println(getJedis().zadd("set1", 20, "user1"));
System.out.println(getJedis().zadd("set1", 17, "user3"));
//
System.out.println(getJedis().zincrby("set1", 5, "user1"));
//
System.out.println(getJedis().zcard("set1"));
//
System.out.println(getJedis().zrange("set1", 0, -1));
System.out.println(getJedis().zrangeWithScores("set1", 0, -1));
System.out.println(getJedis().zscore("set1", "user1"));
// value
System.out.println(getJedis().zcount("set1", 0, 25));
//
System.out.println(getJedis().zrank("set1", "user1"));
//
System.out.println(getJedis().zrem("set1", "user1"));
//
System.out.println(getJedis().zinterstore("out", "set1", "set2"));
}
6、sub/pbRedisリリース購読(pb/sub)は、メッセージ通信モード:送信者(pb)がメッセージを送信し、購読者(sub)がメッセージを受信する。
コマンド
、 、
#1、
redis:0>subscribe mytest mytest1
#2、
redis:0>psubscribe mytest*
#3、
redis:0>unsubscribe mytest
、
redis:0>publish mytest hello