一、支持的数据类型有哪些
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