redis是基于内存的key-value键值对内存数据库,提供了丰富的数据类型,数据类型指的是value的数据类型,key的数据类型都是字符串,value的数据类型有:
字符串(String)、列表(List)、哈希表(Hash)、集合(Set)、有序集合(Sorted Set)、
地理空间(Geospatial)、基数统计(HyperLogLog)、位图(Bitmap)、位域(Bitfield)和流(Stream);
一 字符串
String类型是redis最基本的数据类型,是二进制安全的,可以包含任意数据,String类型最多是512M;
set key value:设置指定key的值,set命令有ex、px、exat、pxat、nx、xx、keepttl、get这几个可选参数
ex seconds:以秒为单位设置过期时间;
px milliseconds:以毫秒为单位设置过期时间;
exat timestamp:设置以秒为单位的unix时间戳所对应的时间为过期时间;
pxat milliseconds-timestamp:设置以毫秒为单位的unix时间戳所对应的时间为过期时间;
nx:键不存在的时候设置键值对,设置成功返回OK,设置不成功返回nil;
xx:键存在的时候设置键值对,设置成功返回OK,设置不成功返回nil;
keepttl:保留key之前设置好的生命周期;
get:返回指定键原本的值,若键不存在时返回nil;
设置成功则返回OK,返回nil为未执行set命令,使用get参数则返回该键原来的值,或键不存在时返回nil;
get key:获取指定key的值;
127.0.0.1:6379> set key1 1 ex 60
OK
127.0.0.1:6379> ttl key1
(integer) 56
127.0.0.1:6379> set key2 1
OK
127.0.0.1:6379> ttl key2
(integer) -1
127.0.0.1:6379> set key2 1 nx
(nil)
127.0.0.1:6379> set key3 1 nx
OK
127.0.0.1:6379> set key3 2 xx
OK
127.0.0.1:6379> set key4 1 xx
(nil)
127.0.0.1:6379> keys *
1) "key3"
2) "key2"
127.0.0.1:6379> set key5 1 ex 60
OK
127.0.0.1:6379> ttl key5
(integer) 52
127.0.0.1:6379> set key5 2 keepttl
OK
127.0.0.1:6379> ttl key5
(integer) 28
127.0.0.1:6379> set key3 3 get
"2"
127.0.0.1:6379> get key3
"3"
127.0.0.1:6379>
mset key1 value1 key2 value2:同时设置一个或多个键值对;
mget key1 key2:同时获取一个或多个给定key的值;
127.0.0.1:6379> mset key1 1 key2 2 key3 3
OK
127.0.0.1:6379> keys *
1) "key3"
2) "key2"
3) "key1"
127.0.0.1:6379> mget key1 key2 key3
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> mget key1 key2
1) "1"
2) "2"
127.0.0.1:6379> mget key1 key2 key4
1) "1"
2) "2"
3) (nil)
127.0.0.1:6379>
setnx key value:只有在key不存在时,设置key的值,设置成功返回1,设置失败返回0;
setex key seconds value:将值value关联到key,并将key的过期时间设为seconds,以秒为单位;
psetex key milliseconds value:将值value关联到key,并将key的过期时间设为milliseconds,以毫秒为单位;
127.0.0.1:6379> setnx key1 1
(integer) 1
127.0.0.1:6379> setnx key1 2
(integer) 0
127.0.0.1:6379> get key1
"1"
127.0.0.1:6379> setex key2 60 1
OK
127.0.0.1:6379> ttl key2
(integer) 55
127.0.0.1:6379>
msetnx key1 value1 key2 value2:同时设置一个或多个键值对,当且仅当所有给定key都不存在才会设置成功返回1,否则返回0;
127.0.0.1:6379> set key1 1
OK
127.0.0.1:6379> msetnx key1 1 key2 1 key3 1
(integer) 0
127.0.0.1:6379> keys *
1) "key1"
127.0.0.1:6379> msetnx key10 1 key2 1 key3 1
(integer) 1
127.0.0.1:6379> keys *
1) "key3"
2) "key2"
3) "key1"
4) "key10"
127.0.0.1:6379>
incr key:将key中储存的数字值加一,并返回,一定是数字才能进行加一操作;
incrby key increment:将key所存储的值加上给定的增量值,并返回;
incrbyfloat key increment:将key所存储的值加上给定的浮点增量值,并返回;
decr key:将key中储存的数字值减一,并返回;
decrby key decrement:将key所储存的值减去给定的减量值,并返回;
127.0.0.1:6379> set key1 1
OK
127.0.0.1:6379> incr key1
(integer) 2
127.0.0.1:6379> incrby key1 3
(integer) 5
127.0.0.1:6379> incrbyfloat key1 3.1
"8.09999999999999964"
127.0.0.1:6379> set key2 10
OK
127.0.0.1:6379> decr key2
(integer) 9
127.0.0.1:6379> decrby key2 3
(integer) 6
127.0.0.1:6379>
setrange key offset value:用value参数覆写给定key所存储的字符串值,从偏移量offset开始;
getrange key start end:获取指定key中值的子字符串,指定区间范围的值,类似between...and的关系;
127.0.0.1:6379> set key1 abcdefghijklmn
OK
127.0.0.1:6379> getrange key1 0 3
"abcd"
127.0.0.1:6379> setrange key1 1 aaa
(integer) 14
127.0.0.1:6379> getrange key1 0 -1
"aaaaefghijklmn"
127.0.0.1:6379>
getset key value:将给定key的值设为value,并返回key的旧值;
getbit key offset:对key所存储的字符串值,获取指定偏移量上的位(bit);
append key value:如果key已经存在并且是一个字符串,append命令将value追加到key原来值的末尾;
strlen key:返回key所存储的字符串值的长度;
127.0.0.1:6379> set key1 1
OK
127.0.0.1:6379> getset key1 2
"1"
127.0.0.1:6379> append key1 hello
(integer) 6
127.0.0.1:6379> get key1
"2hello"
127.0.0.1:6379> strlen key1
(integer) 6
127.0.0.1:6379>
二 列表
List底层是个双端链表,字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边),或者尾部(右边);
List最多可以包含2^32-1个元素,4294967295,每个列表超过40亿个元素,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差;
List主要功能有push/pop等,一般用在栈、队列、消息队列等场景,left、right都可以插入添加;
如果键不存在,创建新的链表,如果键已存在,新增内容,如果值全移除,对应的键也就消失了;
lpush key value1 value2:将一个或多个值插入到列表头部
rpush key value1 value2:将一个或多个值插入到列表尾部
lrange key start stop:获取列表指定范围内的元素,start和stop是列表下表位置
127.0.0.1:6379> lpush key1 a b c d e f g
(integer) 7
127.0.0.1:6379> rpush key2 h i j k l m n
(integer) 7
127.0.0.1:6379> lrange key1 0 -1
1) "g"
2) "f"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"
127.0.0.1:6379> lrange key2 0 -1
1) "h"
2) "i"
3) "j"
4) "k"
5) "l"
6) "m"
7) "n"
127.0.0.1:6379>
lpop key [count]:移除并获取列表的前count个元素,count默认值是1
rpop key [count]:移除并获取列表的后count个元素,count默认值是1
127.0.0.1:6379> lpush key1 a b c d e f g
(integer) 7
127.0.0.1:6379> lpop key1
"g"
127.0.0.1:6379> lrange key1 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> rpop key1 2
1) "a"
2) "b"
127.0.0.1:6379> lrange key1 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
127.0.0.1:6379>
lindex key index:按照索引下标获取列表中的元素,从上到下
llen key:获取列表的长度
127.0.0.1:6379> rpush key1 a b c d e f g
(integer) 7
127.0.0.1:6379> lindex key1 0
"a"
127.0.0.1:6379> lindex key1 6
"g"
127.0.0.1:6379> lindex key1 7
(nil)
127.0.0.1:6379> llen key1
(integer) 7
127.0.0.1:6379>
lrem key count value:删除count个值为value的元素
127.0.0.1:6379> rpush key1 a a a b b b c c c d d d
(integer) 12
127.0.0.1:6379> lrem key1 2 a
(integer) 2
127.0.0.1:6379> lrange key1 0 -1
1) "a"
2) "b"
3) "b"
4) "b"
5) "c"
6) "c"
7) "c"
8) "d"
9) "d"
10) "d"
127.0.0.1:6379> lrem key1 4 d
(integer) 3
127.0.0.1:6379> lrange key1 0 -1
1) "a"
2) "b"
3) "b"
4) "b"
5) "c"
6) "c"
7) "c"
127.0.0.1:6379>
ltrim key start_index stop_index:截取列表指定范围的值后,再重新赋值给key
127.0.0.1:6379> rpush key1 1 2 3 4 5 6 7
(integer) 7
127.0.0.1:6379> ltrim key1 2 6
OK
127.0.0.1:6379> lrange key1 0 -1
1) "3"
2) "4"
3) "5"
4) "6"
5) "7"
127.0.0.1:6379>
rpoplpush source_list destination_list:移除源列表的最后一个元素,并将该元素添加到另一个列表中返回
lset key index value:通过列表指定索引位置设置值
linsert key before/after pivot已有值