Redis五大基本类型——String字符串命令详解(命令用法详解+思维导图详解)
目录
一、String字符串类型介绍
二、常见命令
1、SET
2、GET
3、MGET
4、MSET
·使用MGET 和 使用多次GET的区别
5、DEL
6、SETNX
·SET、SET NX和SET XX执行流程
7、INCR
8、INCRBY
9、DECR
10、DECYBY
11、INCRBYFLOAT
12、APPEND
13、GETRANGE
14、SETRANGE
15、STRLEN
三、命令小结
一、String字符串类型介绍
字符串类型是Redis 最基础的数据类型,Redis中所有键的类型都是字符串类型。其他几种数据库类型都是在字符串类型基础上构建的,例如列表和集合的元素类型都是字符串类型。
字符串类型的值实际可以是字符串,包含一般格式的字符串或者类似JSON、XML格式的字符串;也可以是数字,包括整数和浮点型;也可以是二进制流数据,例如图片、音频、视频等。但要注意,一个字符串的长度不可以超过512MB。
由于Redis内部存储字符串完全是按照二进制流的形式保存的,所以Redis是不处理字符集编码问题的,客户端传入的命令中使用的是什么字符集编码,就存储什么字符集编码。
想显示中文,需要在连接redis服务器时,使用命令:redis-cli --raw
二、常见命令
1、SET
将String类型的value设置到key当中。如果key之前存在,无论原来的数据类型是什么,覆盖。之前关于此key的TTL也全部失效。
语法:
SET key value [EX seconds|PX milliseconds|KEEPTTL] [NX|XX]
[ ]内是选填项,其他的是必填项
EX seconds:以秒作为单位设置key的过期时间
PX milliseconds:以毫秒作为单位设置key的过期时间
KEEPTTL:保留设置前指定键的生存时间
NX:只在key不存在时才设置,如果设置前key已存在,则不执行
XX:只在key存在时才设置,如果设置前key不存在,则不执行
返回值:
如果设置成功,返回OK
如果设置失败,SET不会执行,并返回nil
示例:
127.0.0.1:6379> exists key
0
127.0.0.1:6379> SET key dog
OK
127.0.0.1:6379> get key
dog
127.0.0.1:6379> SET key cat NX
(nil)
127.0.0.1:6379> get key
dog
127.0.0.1:6379> SET key cat XX
OK
127.0.0.1:6379> get key
cat
127.0.0.1:6379> SET key1 111 NX
OK
127.0.0.1:6379> get key1
111
127.0.0.1:6379> SET key2 222 XX
(nil)
127.0.0.1:6379> get key2
(nil)
127.0.0.1:6379> SET key "will expire in 10s" EX 10
OK
127.0.0.1:6379> get key
will expire in 10s
127.0.0.1:6379> get key #10s后
(nil)
2、GET
获取key对应的value。如果key不存在则返回nil,如果value的数据类型不是string,则会报错。
语法:
GET key
返回值:
key对应的value,或者nil
示例:
127.0.0.1:6379> set key1 111
OK
127.0.0.1:6379> get key1
111
127.0.0.1:6379> set key2 "111"
OK
127.0.0.1:6379> get key2
111
127.0.0.1:6379> del key1 #删除key1
1
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> HSET key name dog #设置一个不是String类型的key
1
127.0.0.1:6379> get key
WRONGTYPE Operation against a key holding the wrong kind of value
3、MGET
一次性获取多个key的值。如果key不存在或者对应的的数据类型不是string,则返回nil。
语法:
MGET key [key ...]
返回值:
对应value的列表
示例:
127.0.0.1:6379> SET key1 111
OK
127.0.0.1:6379> SET key2 222
OK
127.0.0.1:6379> SET key3 333
OK
127.0.0.1:6379> MGET key1 key2 key3
111
222
333
127.0.0.1:6379> MGET key1 key2 key3 key4
111
222
333
(nil)
4、MSET
一次性设置多个key的值。
语法:
MSET key value [key value ...]
返回值:
永远是OK
示例:
127.0.0.1:6379> MSET key1 111 key2 222 key3 333
OK
127.0.0.1:6379> get key1
"111"
127.0.0.1:6379> mget key1 key2 key3
1) "111"
2) "222"
3) "333"
·使用MGET 和 使用多次GET的区别
如图所示,使用mget/mset 有效的减少了网络时间,所以性能相较多次使用get/set来说更高。使用批量操作可以有效的提高效率。
但是要注意,由于redis是单线程的,一次批量传输或获取的数据不宜过多,避免因为单一命令执行时间过长导致redis阻塞~
5、DEL
删除指定的key。
语法:
DEL key [key ...]
返回值:
删除的个数
示例:
127.0.0.1:6379> set key1 111
OK
127.0.0.1:6379> set key2 222
OK
127.0.0.1:6379> set key3 333
OK
127.0.0.1:6379> DEL key1
(integer) 1
127.0.0.1:6379> DEL key2 key3
(integer) 2
127.0.0.1:6379> exists key
(integer) 0
127.0.0.1:6379> DEL key
(integer) 0
6、SETNX
设置key-value,但只允许在 key 之前不存在的前提下。
语法:
SETNX key value
返回值:
1表示设置成功
0表示没有设置
示例:
127.0.0.1:6379> SETNX key1 111
(integer) 1
127.0.0.1:6379> get key1
"111"
127.0.0.1:6379> SETNX key2 222
(integer) 1
127.0.0.1:6379> get key2
"222"
127.0.0.1:6379> SETNX key1 666
(integer) 0
127.0.0.1:6379> get key1
"111"
·SET、SET NX和SET XX执行流程
7、INCR
将key对应的value表示的数字加一。如果key不存在们则视为key对应的value是0,创建key;如果key对应的string不是一个整数或者范围超过了64位有符号整数,则报错。
语法:
INCR key
返回值:
integer类型的加完后的数值
示例:
127.0.0.1:6379> EXISTS key1
(integer) 0
127.0.0.1:6379> INCR key1
(integer) 1
127.0.0.1:6379> get key1
"1"
127.0.0.1:6379> set key2 222
OK
127.0.0.1:6379> INCR key2
(integer) 223
127.0.0.1:6379> get key2
"223"
127.0.0.1:6379> set key3 three
OK
127.0.0.1:6379> incr key3
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set key3 33333333333333333333333333333333333333333333333333333333333333333333333333333333333333
OK
127.0.0.1:6379> INCR key3
(error) ERR value is not an integer or out of range
8、INCRBY
将key对应的value表示的数字加上对应的值。如果key不存在们则视为key对应的value是0,创建key;如果key对应的string不是一个整数或者范围超过了64位有符号整数,则报错。
语法:
INCRBY key increment
返回值:
integer类型的加完后的数值
示例:
127.0.0.1:6379> exists key1
(integer) 0
127.0.0.1:6379> INCRBY key1 111
(integer) 111
127.0.0.1:6379> get key1
"111"
127.0.0.1:6379> set key2 222
OK
127.0.0.1:6379> INCRBY key2 111
(integer) 333
127.0.0.1:6379> get key2
"333"
127.0.0.1:6379> set key3 three
OK
127.0.0.1:6379> INCRBY key3 1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set key3 333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
OK
127.0.0.1:6379> INCRBY key3 1
(error) ERR value is not an integer or out of range
9、DECR
将key对应的value表示的数字减一。如果key不存在们则视为key对应的value是0,创建key;如果key对应的string不是一个整数或者范围超过了64位有符号整数,则报错。
语法:
DECR KEY
返回值:
integer类型的减完后的数值
示例:
127.0.0.1:6379> exists key1
(integer) 0
127.0.0.1:6379> DECR key1
(integer) -1
127.0.0.1:6379> get key1
"-1"
127.0.0.1:6379> set key2 222
OK
127.0.0.1:6379> DECR key2
(integer) 221
127.0.0.1:6379> get key2
"221"
127.0.0.1:6379> set key3 three
OK
127.0.0.1:6379> DECR key3
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set key3 3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
OK
127.0.0.1:6379> DECR key3
(error) ERR value is not an integer or out of range
10、DECYBY
将key对应的value表示的数字减去对应的值。如果key不存在们则视为key对应的value是0,创建key;如果key对应的string不是一个整数或者范围超过了64位有符号整数,则报错。
语法:
DECRBY key increment
返回值:
integer类型的减完后的数值
示例:
127.0.0.1:6379> exists key1
(integer) 0
127.0.0.1:6379> DECRBY key1 111
(integer) -111
127.0.0.1:6379> get key1
"-111"
127.0.0.1:6379> set key2 222
OK
127.0.0.1:6379> DECRBY key2 111
(integer) 111
127.0.0.1:6379> get key2
"111"
127.0.0.1:6379> set key3 three
OK
127.0.0.1:6379> DECRBY key3 1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set key3 33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
OK
127.0.0.1:6379> DECRBY key3 1
(error) ERR value is not an integer or out of range
11、INCRBYFLOAT
将key对应的value表示的浮点数加上对应的值。如果对应的是负数,则视为减去对应的值;如果key不存在们则视为key对应的value是0,创建key;如果key对应的string不是一个浮点数,则报错。允许使用科学记数法表示浮点数。
什么是科学记数法:
科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式(1≤|a|<10,a不为分数形式,n为整数),这种记数法叫做科学记数法。当我们要标记或运算某个较大或较小且位数较多的数时,用科学记数法免去浪费很多空间和时间。
语法:
INCRBYFLOAT key increment
返回值:
加/减完后的数值
示例:
127.0.0.1:6379> exists key1
(integer) 0
127.0.0.1:6379> INCRBYFLOAT key1 1.1
"1.1"
127.0.0.1:6379> INCRBYFLOAT key1 -0.1
"1"
127.0.0.1:6379> set key2 1.0e3
OK
127.0.0.1:6379> INCRBYFLOAT key2 100
"1100"
127.0.0.1:6379> INCRBYFLOAT key2 -100
"1000"
12、APPEND
语法:
APPEND key value
返回值:
追加完成后string的长度
示例:
127.0.0.1:6379> exists key1
(integer) 0
127.0.0.1:6379> APPEND key1 hello
(integer) 5
127.0.0.1:6379> get key1
"hello"
127.0.0.1:6379> APPEND key1 world
(integer) 10
127.0.0.1:6379> get key1
"helloworld"
13、GETRANGE
返回 key 对应的 value的⼦串,由 start 和 end 确定(左闭右闭)。可以使⽤负数表⽰倒数。-1 代表倒数第⼀个字符,-2 代表倒数第⼆个,其他的与此类似。超过范围的偏移量会根据 string 的⻓度调整 成正确的值。
语法:
GETRANGE key start end
返回值:
string类型的字串
示例:
127.0.0.1:6379> get key1
"helloworld"
127.0.0.1:6379> GETRANGE key1 0 -1
"helloworld"
127.0.0.1:6379> GETRANGE key1 0 4
"hello"
127.0.0.1:6379> GETRANGE key1 -10 -1
"helloworld"
127.0.0.1:6379> GETRANGE key1 -100 100
"helloworld"
127.0.0.1:6379> GETRANGE key1 100 200
""
14、SETRANGE
从指定的偏移开始覆盖字符串的一部分。
语法:
SETRANGE key offset value
返回值:
替换后的string的长度
示例:
127.0.0.1:6379> set key "hello world!"
OK
127.0.0.1:6379> get key
"hello world!"
127.0.0.1:6379> SETRANGE key 1 ooo
(integer) 12
127.0.0.1:6379> get key
"hoooo world!"
127.0.0.1:6379> SETRANGE key 6 aabbccdd
(integer) 14
127.0.0.1:6379> get key
"hoooo aabbccdd"
15、STRLEN
获取key对应的value的长度,当key存放的类型不是string时,报错。
语法:
STRLEN key
返回值:
当key存在且value是string类型时,返回对应的长度
当key不存在时,返回0
示例:
127.0.0.1:6379> set key1 "hello world!!!"
OK
127.0.0.1:6379> STRLEN key1
(integer) 14
127.0.0.1:6379> exists key2
(integer) 0
127.0.0.1:6379> STRLEN key2
(integer) 0
三、命令小结
以上就是 Redis五大基本类型——String字符串命令详解(命令用法详解+思维导图详解)的全部内容了,希望能对你有所帮助!你的点赞收藏关注是对我最大的支持!