redis-03-データ型
14982 ワード
宣言
この文章には技術的な含有量はありません.後で確認するために、本人の命令練習記録だけです.
[TOC]
1 redisベースコマンド
基本データ型を見る前に、redisのkeyに関する知識点を見てみましょう.
1.1 keys
1.2 exists
あるキーが存在するかどうかを判断する
1.3 move
キーを指定し、指定したDBにデータを移動します.
1.4 expire
指定
1.5 ttl
キーの残りの有効期限を返します.Redis 2.6以降 keyが存在しない、または期限切れの場合は戻る Redis 2より.8スタート keyが存在しないか期限切れの場合は戻る keyに有効期限が設定されていない場合(永久有効)、戻る
1.6 type
戻り
2 redis-ビッグ5データ型-概要 string
stringには、他の言語の文字列の特性があります.stringタイプはRedisの最も基本的なデータ型であり、1つのredisの文字列valueは最大512 Mであることができる.
stringタイプはバイナリで安全です.redisのstringは任意のデータを含むことができるという意味です.例えばjpgピクチャやシーケンス化されたオブジェクト. list
listは文字列リストで、挿入順に並べ替えられます. hash
私の第一映像はJavaの set
Javaの zset
setとの違いは、zsetの各要素にdoubleタイプのscoreが関連付けられていることです.
3 string
3.1 set/get/append/strlen/del
3.2 incr/incrby/decr/decrby
3.3 getrange/setrange getrange key start end 子列を取るための命令 startとendの値と setrange key offset value 指定されたoffsetからvalueを覆う長さ もし 存在しない offset最大2^29-1(536870911)
3.4 setex/getnx setex(set with expire) setとともにkeyに期限切れを指定 setnx(set if not exists) keyが存在しない場合set値 return 1 keyがセットされたら return 0 keyがセットされていなければ成功
3.5 mset/mget/msetnx mset k1 v1 [k2,v2 ...] mget msetnx k1 v1 [k2,v2 ...] キーが1つあれば失敗 return 1、すべてのキーがセットされている return 0、すべてのキーが設定されていない(少なくとも1つのキーは既に存在する)
4 list
4.1 lpush/rpush/lrange
4.2 lpop/rpop/lindex/llen llen keyが存在しない場合は空リストとみなされ、戻り長さは0 keyに格納されている値がリストでなければerrorを返します
4.3 lrem/ltrim lrem key count value count>0:count個の値がvalueの要素を最初から最後まで除去 count<0:count個の値がvalueの要素を末尾から除去 count=0:valueのすべての値を持つ要素を削除 ltrim key start end
4.4 rpoplpush
4.5 linsert
5 set
5.1 sadd/smembers/sismember/srem/scard
5.2 srandmember/spop
5.3 smove
5.4数学集合操作
6 hash
6.1 hget/hset/hmset/hmget/hgetall
6.2 hlen/hdel/hkeys/hvals
6.3 hincrby/hIncrByFloat
6.4 hsetnx
7 zset
7.1 zadd/zrange
7.2 zRangeByScore
7.3 zrem/zcard/zcount
参考資料尚シリコンバレー思惟導図資料 http://www.redis.cn/commands.html https://redis.io/commands
この文章には技術的な含有量はありません.後で確認するために、本人の命令練習記録だけです.
[TOC]
1 redisベースコマンド
基本データ型を見る前に、redisのkeyに関する知識点を見てみましょう.
1.1 keys
127.0.0.1:6379> keys *
1) "counter:__rand_int__"
2) "mylist"
3) "key:__rand_int__"
4) "k1"
1.2 exists
あるキーが存在するかどうかを判断する
127.0.0.1:6379> EXISTS k1
(integer) 1 # 1
127.0.0.1:6379> EXISTS k11
(integer) 0 # 0
1.3 move
キーを指定し、指定したDBにデータを移動します.
move key db-index
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k1"
127.0.0.1:6379> MOVE k1 6 # k1 6
(integer) 1
127.0.0.1:6379> keys *
1) "k2"
127.0.0.1:6379> SELECT 6
OK
127.0.0.1:6379[6]> keys *
1) "k1"
1.4 expire
指定
key
生存時間を設定し、key
期限切れ(生存時間0
)の場合、自動的に削除されます.expire key seconds
127.0.0.1:6379[6]> set k1 v1
OK
127.0.0.1:6379[6]> set k2 v2
OK
127.0.0.1:6379[6]> EXPIRE k1 10 # 10 ,k1
(integer) 1
1.5 ttl
キーの残りの有効期限を返します.
-1
.-2
-1
.1.6 type
戻り
key
格納されているvalue
のデータ構造タイプ、例えばstring
、list
、set
、zset
とhash
とは異なるタイプ.2 redis-ビッグ5データ型-概要
stringには、他の言語の文字列の特性があります.stringタイプはRedisの最も基本的なデータ型であり、1つのredisの文字列valueは最大512 Mであることができる.
stringタイプはバイナリで安全です.redisのstringは任意のデータを含むことができるという意味です.例えばjpgピクチャやシーケンス化されたオブジェクト.
listは文字列リストで、挿入順に並べ替えられます.
私の第一映像はJavaの
Map
です.似ていますが、違います.Javaの
Set
と同様、無秩序な文字列の集合です.setとの違いは、zsetの各要素にdoubleタイプのscoreが関連付けられていることです.
3 string
3.1 set/get/append/strlen/del
127.0.0.1:6379[6]> FLUSHALL
OK
127.0.0.1:6379[6]> set k1 a
OK
127.0.0.1:6379[6]> get k1 # k1 "a"
"a"
127.0.0.1:6379[6]> APPEND k1 bcd # k1 "bcd"
(integer) 4
127.0.0.1:6379[6]> get k1
"abcd"
127.0.0.1:6379[6]> STRLEN k1 #
(integer) 4
127.0.0.1:6379[6]> DEL k1
(integer) 1
127.0.0.1:6379[6]> keys *
(empty list or set)
3.2 incr/incrby/decr/decrby
127.0.0.1:6379[6]> FLUSHALL
OK
127.0.0.1:6379[6]> set k1 1
OK
127.0.0.1:6379[6]> get k1
"1"
127.0.0.1:6379[6]> INCR k1
(integer) 2
127.0.0.1:6379[6]> INCR k1
(integer) 3
127.0.0.1:6379[6]> INCRBY k1 5 # 5
(integer) 8
127.0.0.1:6379[6]> INCRBY k1 5 # 3
(integer) 13
127.0.0.1:6379[6]> DECR k1
(integer) 12
127.0.0.1:6379[6]> DECRBY k1 3
(integer) 9
127.0.0.1:6379[6]>
3.3 getrange/setrange
Python
のうち
類似offset>strlen(key)
であればkey
対応する値後補offset-strlen(key)
個
後に引き続き追加key
key
と思われる
127.0.0.1:6379[6]> set k "abcdefgh"
OK
127.0.0.1:6379[6]> SETRANGE k 1 "x"
(integer) 8
127.0.0.1:6379[6]> get k
"axcdefgh"
127.0.0.1:6379[6]> SETRANGE k 1 "yy"
(integer) 8
127.0.0.1:6379[6]> get k
"ayydefgh"
127.0.0.1:6379[6]> SETRANGE k 1 "yyyyyyyyyy"
(integer) 11
127.0.0.1:6379[6]> get k
"ayyyyyyyyyy"
127.0.0.1:6379[6]> setrange k 15 "123x"
(integer) 19
127.0.0.1:6379[6]> get k
"ayyyyyyyyyy\x00\x00\x00\x00123x"
# k88 ,
127.0.0.1:6379[6]> SETRANGE k88 3 "haha"
(integer) 7
127.0.0.1:6379[6]> get k88
"\x00\x00\x00haha" # 3
127.0.0.1:6379[6]>
3.4 setex/getnx
# 8
127.0.0.1:6379[6]> SETEX k88 10 "haha"
OK
127.0.0.1:6379> SETNX k1 111 # k1 k1 111
(integer) 1
127.0.0.1:6379> get k1
"111"
127.0.0.1:6379> SETNX k1 222 # k1 ,
(integer) 0
127.0.0.1:6379> get k1
"111"
3.5 mset/mget/msetnx
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> MGET k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
4 list
4.1 lpush/rpush/lrange
127.0.0.1:6379> LPUSH l1 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379> LRANGE l1 0 2
1) "6"
2) "5"
3) "4"
127.0.0.1:6379> LRANGE l1 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> LSET l1 2 "abc"
OK
127.0.0.1:6379> LRANGE l1 0 -1
1) "6"
2) "5"
3) "abc"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379>
4.2 lpop/rpop/lindex/llen
127.0.0.1:6379> LPUSH l1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LPOP l1
"5"
127.0.0.1:6379> RPOP l1
"1"
127.0.0.1:6379> LRANGE l1 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> RPUSH l2 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LPOP l2
"1"
127.0.0.1:6379> RPOP l2
"5"
127.0.0.1:6379> LRANGE l2 0 -1
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> RPUSH l3 1 2 3 4
(integer) 4
127.0.0.1:6379> LINDEX l3 0
"1"
127.0.0.1:6379> LINDEX l3 2
"3"
127.0.0.1:6379> LLEN l3
(integer) 4
4.3 lrem/ltrim
127.0.0.1:6379> RPUSH l1 a b c a c d e a d a
(integer) 10
127.0.0.1:6379> LRANGE l1 0 -1
1) "a"
2) "b"
3) "c"
4) "a"
5) "c"
6) "d"
7) "e"
8) "a"
9) "d"
10) "a"
# a
127.0.0.1:6379> LREM l1 2 a
(integer) 2
127.0.0.1:6379> LRANGE l1 0 -1
1) "b"
2) "c"
3) "c"
4) "d"
5) "e"
6) "a"
7) "d"
8) "a"
# d
127.0.0.1:6379> LREM l1 -1 d
(integer) 1
127.0.0.1:6379> LRANGE l1 0 -1
1) "b"
2) "c"
3) "c"
4) "d"
5) "e"
6) "a"
7) "a"
# c
127.0.0.1:6379> LREM l1 0 c
(integer) 2
127.0.0.1:6379> LRANGE l1 0 -1
1) "b"
2) "d"
3) "e"
4) "a"
5) "a"
127.0.0.1:6379> RPUSH l2 a b c d a c e
(integer) 7
# 2-4
127.0.0.1:6379> LTRIM l2 2 4
OK
127.0.0.1:6379> LRANGE l2 0 -1
1) "c"
2) "d"
3) "a"
127.0.0.1:6379>
4.4 rpoplpush
127.0.0.1:6379> RPUSH l1 1 2 3
(integer) 3
127.0.0.1:6379> RPUSH l2 a b c
(integer) 3
127.0.0.1:6379> RPOPLPUSH l1 l2
"3"
127.0.0.1:6379> LRANGE l1 0 -1
1) "1"
2) "2"
127.0.0.1:6379> LRANGE l2 0 -1
1) "3"
2) "a"
3) "b"
4) "c"
4.5 linsert
127.0.0.1:6379> RPUSH l1 1 2 3
(integer) 3
# l1 3
127.0.0.1:6379> LINSERT l1 before 3 "newVal"
(integer) 4
127.0.0.1:6379> LRANGE l1 0 -1
1) "1"
2) "2"
3) "newVal"
4) "3"
# l1 "newVal"
127.0.0.1:6379> LINSERT l1 after "newVal" "anotherNewVal"
(integer) 5
127.0.0.1:6379> LRANGE l1 0 -1
1) "1"
2) "2"
3) "newVal"
4) "anotherNewVal"
5) "3"
# "ha"
127.0.0.1:6379> LINSERT l1 after "ha" "o..."
# "ha" , -1
(integer) -1
127.0.0.1:6379> LRANGE l1 0 -1
1) "1"
2) "2"
3) "newVal"
4) "anotherNewVal"
5) "3"
127.0.0.1:6379>
5 set
5.1 sadd/smembers/sismember/srem/scard
127.0.0.1:6379> SADD s1 1 2 3 1 2 3 1
(integer) 3
127.0.0.1:6379> SMEMBERS s1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SISMEMBER s1 2 # contains
(integer) 1
127.0.0.1:6379> SISMEMBER s1 111
(integer) 0
127.0.0.1:6379> SCARD s1 # count
(integer) 3
127.0.0.1:6379> SREM s1 2 # del
(integer) 1
127.0.0.1:6379> SMEMBERS s1
1) "1"
2) "3"
5.2 srandmember/spop
127.0.0.1:6379> SADD s2 0 1 2 3 4 5 6 7 8 9
(integer) 10
# srandmember
127.0.0.1:6379> SRANDMEMBER s2 3 #
1) "8"
2) "7"
3) "6"
127.0.0.1:6379> SRANDMEMBER s2 3
1) "8"
2) "2"
3) "4"
127.0.0.1:6379> SRANDMEMBER s2 3
1) "2"
2) "7"
3) "4"
# spop
127.0.0.1:6379> spop s2 2
1) "2"
2) "7"
127.0.0.1:6379> spop s2 2
1) "5"
2) "9"
127.0.0.1:6379> spop s2 2
1) "8"
2) "4"
127.0.0.1:6379> SMEMBERS s2
1) "0"
2) "1"
3) "3"
4) "6"
5.3 smove
127.0.0.1:6379> sadd s1 1 2 3
(integer) 3
127.0.0.1:6379> SADD s2 a b c
(integer) 3
# s1 2 s2
127.0.0.1:6379> SMOVE s1 s2 2
(integer) 1 # return 1 ==>
127.0.0.1:6379> SMEMBERS s1
1) "1"
2) "3"
127.0.0.1:6379> SMEMBERS s2
1) "2"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> SMOVE s1 s2 -1
(integer) 0 # return 0 ==>
127.0.0.1:6379>
5.4数学集合操作
127.0.0.1:6379> SADD s1 1 2 3
(integer) 3
127.0.0.1:6379> SADD s2 2 3 a b
(integer) 4
127.0.0.1:6379> SINTER s2 s1 #
1) "2"
2) "3"
127.0.0.1:6379> SUNION s1 s2 #
1) "3"
2) "2"
3) "b"
4) "1"
5) "a"
127.0.0.1:6379> SDIFF s1 s2 #
1) "1"
127.0.0.1:6379> SDIFF s2 s1 #
1) "a"
2) "b"
127.0.0.1:6379>
6 hash
6.1 hget/hset/hmset/hmget/hgetall
127.0.0.1:6379> HSET user id 1
(integer) 1
127.0.0.1:6379> HSET user name "tom"
(integer) 1
127.0.0.1:6379> HGET user id
"1"
127.0.0.1:6379> HGET user name
"tom"
# set user.name="apache",user.age=24,user.sex="male"
127.0.0.1:6379> HMSET user name "apache" age 24 sex "male"
OK
127.0.0.1:6379> HGET user age
"24"
# get user.id,user.name,user.age,user.sex
127.0.0.1:6379> HMGET user id name age sex
1) "1"
2) "apache"
3) "24"
4) "male"
127.0.0.1:6379> HGETALL user
1) "id"
2) "1"
3) "name"
4) "apache"
5) "age"
6) "24"
7) "sex"
8) "male"
127.0.0.1:6379>
6.2 hlen/hdel/hkeys/hvals
127.0.0.1:6379> HDEL user age sex # del user.age ,del user.sex
(integer) 2
127.0.0.1:6379> HGETALL user
1) "id"
2) "1"
3) "name"
4) "apache"
127.0.0.1:6379> HLEN user
(integer) 2
# user.keySet()
127.0.0.1:6379> HKEYS user
1) "id"
2) "name"
# user.values()
127.0.0.1:6379> HVALS user
1) "1"
2) "apache"
127.0.0.1:6379>
6.3 hincrby/hIncrByFloat
127.0.0.1:6379> HSET u age 1
(integer) 1
127.0.0.1:6379> HINCRBY u age 1 # u.age++
(integer) 2
127.0.0.1:6379> HINCRBY u age 1 # u.age++
(integer) 3
127.0.0.1:6379> HINCRBY u age 1 # u.age++
(integer) 4
127.0.0.1:6379> HGET u age
"4"
127.0.0.1:6379> HINCRBY u age 10 # u.age += 10
(integer) 14
127.0.0.1:6379> HGET u age
"14"
127.0.0.1:6379> HINCRBY u age -2 # u.age -= 2
(integer) 12
127.0.0.1:6379> HINCRBYFLOAT u age 1.2 # u.age += 1.2
"13.2"
127.0.0.1:6379> HINCRBYFLOAT u age 1.5 # u.age += 1.5
"14.7"
127.0.0.1:6379> HINCRBYFLOAT u age -1.5 # u.age -= 1.5
"13.2"
127.0.0.1:6379>
6.4 hsetnx
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> HSET user id 1
(integer) 1
127.0.0.1:6379> HSETNX user name "tom" # ,
(integer) 1
127.0.0.1:6379> HSETNX user name "tom" # ,
(integer) 0
127.0.0.1:6379>
7 zset
7.1 zadd/zrange
127.0.0.1:6379> ZADD z1 1 v1 2 v2 3 v3
(integer) 3
127.0.0.1:6379> ZRANGE z1 0 -1
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> ZRANGE z1 0 -1 withscores
1) "v1"
2) "1"
3) "v2"
4) "2"
5) "v3"
6) "3"
127.0.0.1:6379>
7.2 zRangeByScore
# 1 <= score <= 2
127.0.0.1:6379> ZRANGEBYSCORE z1 1 2
1) "v1"
2) "v2"
# 1 <= score <= 2 score
127.0.0.1:6379> ZRANGEBYSCORE z1 1 2 withscores
1) "v1"
2) "1"
3) "v2"
4) "2"
# 1 <= score < 2
127.0.0.1:6379> ZRANGEBYSCORE z1 1 (2
1) "v1"
# 1 <= score < 2 score
127.0.0.1:6379> ZRANGEBYSCORE z1 1 (2 withscores
1) "v1"
2) "1"
# v4,v5
127.0.0.1:6379> ZADD z1 4 v4 5 v5
(integer) 2
127.0.0.1:6379> ZRANGE z1 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
# 2 <= score <= 4
127.0.0.1:6379> ZRANGEBYSCORE z1 2 4
1) "v2"
2) "v3"
3) "v4"
# limit MySQL
127.0.0.1:6379> ZRANGEBYSCORE z1 2 4 limit 2 1
1) "v4"
127.0.0.1:6379> ZRANGEBYSCORE z1 2 4 limit 0 1
1) "v2"
127.0.0.1:6379>
7.3 zrem/zcard/zcount
127.0.0.1:6379> ZADD z2 1 v1 2 v2 3 v3
(integer) 3
127.0.0.1:6379> ZCARD z2 # size of z2
(integer) 3
127.0.0.1:6379> ZREM z2 v2 v3 # del v2,v3
(integer) 2
127.0.0.1:6379> ZRANGE z2 0 -1
1) "v1"
# 1 <= score <=5
127.0.0.1:6379> ZCOUNT z2 1 5
(integer) 1
# v1 score
127.0.0.1:6379> ZSCORE z2 v1
"1"
127.0.0.1:6379>
参考資料