Redis学习(二)—— 数据类型

一、支持的数据类型有哪些

edis支持的数据类型非常丰富,有String、list、set、hash、zset、hyperLogLog、geo

二、详细介绍每种数据类型

1. String类型

redis中的字符串就是一个由字节组成的序列。字符串可以储存一下3种类型的数据

    字节串

    整数

    浮点数

对整数和浮点数的操作

命令INCR,将存储的值加上1

127.0.0.1:6379> set s_incr 0
OK
127.0.0.1:6379> incr s_incr
(integer) 1
127.0.0.1:6379> incr s_incr
(integer) 2

命令DECR,将存储的值减上1

127.0.0.1:6379> set s_decr 10
OK
127.0.0.1:6379> decr s_decr
(integer) 9
127.0.0.1:6379> decr s_decr
(integer) 8

命令INCRBY,将存储的值加上整数

127.0.0.1:6379> set s_incrby 0
OK
127.0.0.1:6379> incrby s_incrby 5
(integer) 5
127.0.0.1:6379> incrby s_incrby 2
(integer) 7

命令DECRBY,将存储的值减上整数

127.0.0.1:6379> set s_decrby 10
OK
127.0.0.1:6379> decrby s_decrby 2
(integer) 8
127.0.0.1:6379> decrby s_decrby 3
(integer) 5

命令INCRBYFLOAT,将存储的值加上浮点数(2.6版本以上使用)

127.0.0.1:6379> set s_incrbyfloat 2
OK
127.0.0.1:6379> incrbyfloat s_incrbyfloat 1.5
"3.5"
127.0.0.1:6379> incrbyfloat s_incrbyfloat 0.6
"4.1"

对字符串的操作

命令APPEND,将值value追加到给定键当前存储的值的末尾

127.0.0.1:6379> set s_append leo
OK
127.0.0.1:6379> append s_append _111
(integer) 7
127.0.0.1:6379> get s_append
"leo_111"

命令GETRANGE,获取start至end范围内所有字符组成的子串,包括start和end在内(该命令是由SUBSTR命令改名而来,2.6以上版本还是推荐使用GETRANGE命令)

127.0.0.1:6379> getrange s_append 1 3
"eo_"

命令SETRANGE,将从start偏移量开始的子串设置为给定值

127.0.0.1:6379> setrange s_append 4 222
(integer) 7
127.0.0.1:6379> get s_append
"leo_222"

命令STRLEN,获得该键保存的value的长度

127.0.0.1:6379> strlen s_append
(integer) 7

命令GET,获得该键保存的值

127.0.0.1:6379> get s_append
"leo_222"

命令GETSET,设置一个字符类型的值,并且返回他之前的值

127.0.0.1:6379> getset s_append leo_333
"leo_222"
127.0.0.1:6379> getset s_append1 leo_333(设置一个不存在的key会返回nil)
(nil)
127.0.0.1:6379> get s_append1
"leo_333"

命令MGET,根据提供的多个键返回键对应的多个值

127.0.0.1:6379> set s_append1 leo_444
OK
127.0.0.1:6379> mget s_append s_append1
1) "leo_333"
2) "leo_444"

命令MSET,设置多个键值对

127.0.0.1:6379> mset s_append2 leo_555 s_append3 leo_666
OK
127.0.0.1:6379> mget s_append2 s_append3
1) "leo_555"
2) "leo_666"

命令MSETNX,设置多个键值对,如果键不存在的时候设置成功(如果多个键值对有一个不满足要求,就全部设置不成功)

127.0.0.1:6379> msetnx s_append3 leo_777 s_append4 leo_888
(integer) 0
127.0.0.1:6379> mget s_append3 s_append4
1) "leo_666"
2) (nil)
127.0.0.1:6379> msetnx s_append5 leo_777 s_append4 leo_888
(integer) 1
127.0.0.1:6379> mget s_append5 s_append4
1) "leo_777"
2) "leo_888"

命令PSETEX,给一个键设置值和过期的毫秒数

127.0.0.1:6379> psetex s_ex 5000 test
OK
127.0.0.1:6379> get s_ex
"test"
127.0.0.1:6379> get s_ex
(nil)

命令SET,给一个键设置字符串值,命令格式set key value [EX seconds] [PX milliseconds] [NX|XX]

127.0.0.1:6379> set s_set test1 EX 20
OK
127.0.0.1:6379> get s_set
"test1"
127.0.0.1:6379> get s_set
"test1"
127.0.0.1:6379> get s_set
"test1"
127.0.0.1:6379> get s_set
"test1"
127.0.0.1:6379> get s_set
"test1"
127.0.0.1:6379> get s_set
"test1"
127.0.0.1:6379> get s_set
"test1"
127.0.0.1:6379> get s_set
"test1"
127.0.0.1:6379> get s_set
"test1"
127.0.0.1:6379> get s_set
(nil)
127.0.0.1:6379> set s_setml test EX 10 PX 5000(PX和EX参数不能同时设置)
(error) ERR syntax error
127.0.0.1:6379> set s_setml test PX 5000(这里手慢了一点,不过确实生效了)
OK
127.0.0.1:6379> get s_setml
(nil)
127.0.0.1:6379> set s_nx test XX(该键如果存在的时候才会设置成功)
(nil)
127.0.0.1:6379> get s_nx
(nil)
127.0.0.1:6379> set s_nx test NX(该键如果不存在的时候才会设置成功)
OK
127.0.0.1:6379> set s_nx test NX
(nil)

命令SETEX,给键设置值和过期时间

127.0.0.1:6379> setex s_ex 5 aaa
OK
127.0.0.1:6379> get s_ex
"aaa"
127.0.0.1:6379> get s_ex
(nil)

命令SETNX,给键设置值,只有键不存在的时候才能成功

127.0.0.1:6379> setnx s_nx test
(integer) 0
127.0.0.1:6379> setnx s_nx test
(integer) 0
127.0.0.1:6379> get s_nx
"test"

2. list类型

redis中一个列表结构可以有序的存储多个字符串,并且可以重复。

命令RPUSH,将给定值推入列表的右端

127.0.0.1:6379> rpush l_rpush leo
(integer) 1
127.0.0.1:6379> rpush l_rpush leo1
(integer) 2
127.0.0.1:6379> rpush l_rpush leo
(integer) 3

命令LRANGE,获取列表在给定范围上的所有值

127.0.0.1:6379> lrange l_rpush 0 -1(0 -1代表获取列表中的所有值)
1) "leo"
2) "leo1"
3) "leo"
127.0.0.1:6379> lrange l_rpush 0 1
1) "leo"
2) "leo1"

命令LINDEX,获取列表在给定位置上的单个元素

127.0.0.1:6379> lindex l_rpush 1
"leo1"
127.0.0.1:6379> lindex l_rpush 2
"leo"

命令LPOP,从列表的左端弹出一个值,并返回被弹出的值

127.0.0.1:6379> lpop l_rpush
"leo"
127.0.0.1:6379> lrange l_rpush 0 -1
1) "leo1"
2) "leo"

命令BLPOP,从列表的左端弹出一个值,并返回被弹出的值,如果列表为空就会阻塞,直到列表中存在值

127.0.0.1:6379> blpop l_bl 20(20为等待超时时间,如果超时会返回nil)
(nil)

先执行

127.0.0.1:6379> blpop b_bl 20

然后重新开一个命令行窗口执行

127.0.0.1:6379> lpush b_bl 1
(integer) 1

可以看到BLPOP命令正确返回了数据

127.0.0.1:6379> blpop b_bl 20
1) "b_bl"
2) "1"
(3.63s)

命令BLPOP,从列表的右端弹出一个值,并返回被弹出的值,如果列表为空就会阻塞,直到列表中存在值

命令BRPOPLPUSH,从原列表中弹出最右边的值,并且推入到另一个列表的最左边

127.0.0.1:6379> lpush l_source 1 2 3
(integer) 3
127.0.0.1:6379> lpush l_dest 4 5 6
(integer) 3
127.0.0.1:6379> brpoplpush l_source l_dest 20
"1"
127.0.0.1:6379> lrange l_dest 0 -1
1) "1"
2) "6"
3) "5"
4) "4"

命令LINDEX,从列表中的某个索引获得这个元素

127.0.0.1:6379> LINDex l_dest 2
"5"

命令LINSERT,从列表中另外一个元素的前面或者后面插入一个元素

127.0.0.1:6379> linsert l_dest before 6 2
(integer) 5
127.0.0.1:6379> lrange l_dest 0 -1
1) "1"
2) "2"
3) "6"
4) "5"
5) "4"

命令LLEN,获得list的长度

127.0.0.1:6379> llen l_dest
(integer) 5

命令LPOP,从列表左边弹出一个元素

127.0.0.1:6379> lpop l_dest
"1"

命令LPUSH,从列表左边推入一个元素

127.0.0.1:6379> lpush l_dest 0
(integer) 5
127.0.0.1:6379> lrange l_dest 0 -1
1) "0"
2) "2"
3) "6"
4) "5"
5) "4"

命令LPUSHX,如果键存在的话,就从左边推入一个元素

127.0.0.1:6379> lpushx l_dest1 123
(integer) 0
127.0.0.1:6379> lpushx l_dest 123
(integer) 6
127.0.0.1:6379> lrange l_dest 0 -1
1) "123"
2) "0"
3) "2"
4) "6"
5) "5"
6) "4"

命令LREM,从列表左边移除几个给定的元素

127.0.0.1:6379> lrange l_dest 0 -1
1) "4"
2) "0"
3) "123"
4) "0"
5) "2"
6) "6"
7) "5"
8) "4"
127.0.0.1:6379> lrange l_dest 0 -1(最左边的0被移除)
1) "4"
2) "123"
3) "0"
4) "2"
5) "6"
6) "5"
7) "4"
127.0.0.1:6379> lpush l_dest 4
(integer) 8
127.0.0.1:6379> lrem l_dest 2 4(移除了左边的两个4)
(integer) 2
127.0.0.1:6379> lrange l_dest 0 -1
1) "123"
2) "0"
3) "2"
4) "6"
5) "5"
6) "4"

命令LSET,给某个列表的第几个索引的元素设置值

127.0.0.1:6379> lset l_dest 1 000
OK
127.0.0.1:6379> lrange l_dest 0 -1
1) "123"
2) "000"
3) "2"
4) "6"
5) "5"
6) "4"

命令LTRIM,修剪列表

127.0.0.1:6379> lrange l_dest 0 -1
1) "123"
2) "000"
3) "2"
4) "6"
5) "5"
6) "4"
127.0.0.1:6379> ltrim l_dest 1 2(只保留index1到index2之间的元素)
OK
127.0.0.1:6379> lrange l_dest 0 -1
1) "000"
2) "2"

命令RPOP,从右侧弹出元素

127.0.0.1:6379> lrange l_dest 0 -1
1) "000"
2) "2"
127.0.0.1:6379> rpop l_dest
"2"
127.0.0.1:6379> lrange l_dest 0 -1
1) "000"

命令RPOPLPUSH,从原列表的右侧弹出元素,加入到给定列表的左边

127.0.0.1:6379> rpoplpush l_dest l_source
"000"
127.0.0.1:6379> lrange l_dest 0 -1
(empty list or set)
127.0.0.1:6379> lrange l_source 0 -1
1) "000"
2) "3"
3) "2"

命令RPUSHX,如果列表存在就从右侧推入元素

127.0.0.1:6379> rpushx l_dest1 haha
(integer) 0
127.0.0.1:6379> rpushx l_source haha
(integer) 4

猜你喜欢

转载自my.oschina.net/u/1175305/blog/1807094