一、支持的数据类型有哪些
redis支持的数据类型非常丰富,有String、list、set、hash、zset、hyperLogLog、geo
二、详细介绍每种数据类型
1. String类型
redis中的字符串就是一个由字节组成的序列。字符串可以储存一下3种类型的数据
字节串
整数
浮点数
对整数和浮点数的操作
命令INCR,将存储的值加上1
127.0.0.1:6379> set s_incr 0OK127.0.0.1:6379> incr s_incr(integer) 1127.0.0.1:6379> incr s_incr(integer) 2
命令DECR,将存储的值减上1
127.0.0.1:6379> set s_decr 10OK127.0.0.1:6379> decr s_decr(integer) 9127.0.0.1:6379> decr s_decr(integer) 8
命令INCRBY,将存储的值加上整数
127.0.0.1:6379> set s_incrby 0OK127.0.0.1:6379> incrby s_incrby 5(integer) 5127.0.0.1:6379> incrby s_incrby 2(integer) 7
命令DECRBY,将存储的值减上整数
127.0.0.1:6379> set s_decrby 10OK127.0.0.1:6379> decrby s_decrby 2(integer) 8127.0.0.1:6379> decrby s_decrby 3(integer) 5
命令INCRBYFLOAT,将存储的值加上浮点数(2.6版本以上使用)
127.0.0.1:6379> set s_incrbyfloat 2OK127.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 leoOK127.0.0.1:6379> append s_append _111(integer) 7127.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) 7127.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_444OK127.0.0.1:6379> mget s_append s_append11) "leo_333"2) "leo_444"
命令MSET,设置多个键值对
127.0.0.1:6379> mset s_append2 leo_555 s_append3 leo_666OK127.0.0.1:6379> mget s_append2 s_append31) "leo_555"2) "leo_666"
命令MSETNX,设置多个键值对,如果键不存在的时候设置成功(如果多个键值对有一个不满足要求,就全部设置不成功)
127.0.0.1:6379> msetnx s_append3 leo_777 s_append4 leo_888(integer) 0127.0.0.1:6379> mget s_append3 s_append41) "leo_666"2) (nil)127.0.0.1:6379> msetnx s_append5 leo_777 s_append4 leo_888(integer) 1127.0.0.1:6379> mget s_append5 s_append41) "leo_777"2) "leo_888"
命令PSETEX,给一个键设置值和过期的毫秒数
127.0.0.1:6379> psetex s_ex 5000 testOK127.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 20OK127.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 error127.0.0.1:6379> set s_setml test PX 5000(这里手慢了一点,不过确实生效了)OK127.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(该键如果不存在的时候才会设置成功)OK127.0.0.1:6379> set s_nx test NX(nil)
命令SETEX,给键设置值和过期时间
127.0.0.1:6379> setex s_ex 5 aaaOK127.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) 0127.0.0.1:6379> setnx s_nx test(integer) 0127.0.0.1:6379> get s_nx"test"
2. list类型
redis中一个列表结构可以有序的存储多个字符串,并且可以重复。
命令RPUSH,将给定值推入列表的右端
127.0.0.1:6379> rpush l_rpush leo(integer) 1127.0.0.1:6379> rpush l_rpush leo1(integer) 2127.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 11) "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 -11) "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 201) "b_bl"2) "1"(3.63s)
命令BLPOP,从列表的右端弹出一个值,并返回被弹出的值,如果列表为空就会阻塞,直到列表中存在值
命令BRPOPLPUSH,从原列表中弹出最右边的值,并且推入到另一个列表的最左边
127.0.0.1:6379> lpush l_source 1 2 3(integer) 3127.0.0.1:6379> lpush l_dest 4 5 6(integer) 3127.0.0.1:6379> brpoplpush l_source l_dest 20"1"127.0.0.1:6379> lrange l_dest 0 -11) "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) 5127.0.0.1:6379> lrange l_dest 0 -11) "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) 5127.0.0.1:6379> lrange l_dest 0 -11) "0"2) "2"3) "6"4) "5"5) "4"
命令LPUSHX,如果键存在的话,就从左边推入一个元素
127.0.0.1:6379> lpushx l_dest1 123(integer) 0127.0.0.1:6379> lpushx l_dest 123(integer) 6127.0.0.1:6379> lrange l_dest 0 -11) "123"2) "0"3) "2"4) "6"5) "5"6) "4"
命令LREM,从列表左边移除几个给定的元素
127.0.0.1:6379> lrange l_dest 0 -11) "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) 8127.0.0.1:6379> lrem l_dest 2 4(移除了左边的两个4)(integer) 2127.0.0.1:6379> lrange l_dest 0 -11) "123"2) "0"3) "2"4) "6"5) "5"6) "4"
命令LSET,给某个列表的第几个索引的元素设置值
127.0.0.1:6379> lset l_dest 1 000OK127.0.0.1:6379> lrange l_dest 0 -11) "123"2) "000"3) "2"4) "6"5) "5"6) "4"
命令LTRIM,修剪列表
127.0.0.1:6379> lrange l_dest 0 -11) "123"2) "000"3) "2"4) "6"5) "5"6) "4"127.0.0.1:6379> ltrim l_dest 1 2(只保留index1到index2之间的元素)OK127.0.0.1:6379> lrange l_dest 0 -11) "000"2) "2"
命令RPOP,从右侧弹出元素
127.0.0.1:6379> lrange l_dest 0 -11) "000"2) "2"127.0.0.1:6379> rpop l_dest"2"127.0.0.1:6379> lrange l_dest 0 -11) "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 -11) "000"2) "3"3) "2"
命令RPUSHX,如果列表存在就从右侧推入元素
127.0.0.1:6379> rpushx l_dest1 haha(integer) 0127.0.0.1:6379> rpushx l_source haha(integer) 4