Redis之String类型的讲解
上次我们分享了Redis中Value的五种基本类型以及Redis中常用的命令,这章我们来详细的学习一下Redis中的String数据类型
【Redis命令的基本使用实践、Redis的五种基本数据类型、各种常用的命令汇总】
Redis中String类型的命令
String类型的命令 | 备注说明 |
---|---|
set | 设置key的值 |
get | 获取对应的key的值 |
strlen | 获取key的值的长度 |
append | 在原有的value的基础上追加内容 |
incr | 将key存储的内容加1 |
incrby | 将key存储的内容加指定的值 |
incrbyfloat | 将key存储的内容累加一个float类型的数据 |
decr | 将key存储的内容减1 |
decrby | 将key存储的内容减去指定的值 |
getrange | 截取value的值 |
setrange | 修改value的部分内容,根据偏移量修改 |
getset | 获取设置key的值并返回原来的旧值 |
mget | 批量获取值 |
mset | 批量设置值 |
setex | 设置key对应的value,同时设置过期时间,单位是秒 |
psetex | 设置key对应的value,同时设置过期时间,单位是毫秒 |
setnx | 只有在 key 不存在时设置 key 的值,set if not exists |
msetnx | 兼具了mset和setnx的特性 |
set
设置key-value键值对的值。
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> set name temp
OK
127.0.0.1:6379> set name1 temp1
OK
127.0.0.1:6379> set name2 temp2
OK
127.0.0.1:6379> keys *
1) "name2"
2) "name1"
3) "name"
127.0.0.1:6379>
get
先通过set设置,然后通过get获取key对应的value值。
如果 key 不存在时,返回 nil。
如果 key 不是字符串类型,那么返回一个错误。
127.0.0.1:6379> keys *
1) "name2"
2) "name1"
3) "name"
127.0.0.1:6379> get name
"temp"
127.0.0.1:6379> get name1
"temp1"
127.0.0.1:6379> get name2
"temp2"
127.0.0.1:6379>
strlen命令
获取key对应的value的长度。
127.0.0.1:6379> keys *
1) "name2"
2) "name1"
3) "name"
127.0.0.1:6379> strlen name
(integer) 4
127.0.0.1:6379> strlen name1
(integer) 5
127.0.0.1:6379>
append命令
如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key原来对应的value的值得末尾,如果key不存在直接创建新的key进行添加。
127.0.0.1:6379> keys *
1) "name2"
2) "name1"
3) "name"
127.0.0.1:6379> append name _zhangsan
(integer) 13
127.0.0.1:6379> get name
"temp_zhangsan"
127.0.0.1:6379> append value temp
(integer) 4
127.0.0.1:6379> keys *
1) "value"
2) "name2"
3) "name1"
4) "name"
127.0.0.1:6379> append sss
(error) ERR wrong number of arguments for 'append' command
127.0.0.1:6379> append s1 v1
(integer) 2
127.0.0.1:6379> keys *
1) "value"
2) "name2"
3) "name"
4) "name1"
5) "s1"
127.0.0.1:6379>
incr命令
将 key 中储存的数字值加一,返回的结果就是加1后的结果。
如果 key 不存在,那么会先创建key的值,然后它的值被初始化为 0 ,然后再执行incr加1的操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
# 正常操作,返回正常加1的结果
127.0.0.1:6379> set age 16
OK
127.0.0.1:6379> get age
"16"
127.0.0.1:6379> incr age
(integer) 17
127.0.0.1:6379> get age
"17"
# age1这个key不存在,先创建,初始化为0,加1的操作
127.0.0.1:6379> incr age1
(integer) 1
127.0.0.1:6379> get age1
"1"
# s1对应的value类型是string类型,不是int类型,直接报出错误
127.0.0.1:6379> incr s1
(error) ERR value is not an integer or out of range
127.0.0.1:6379>
incrby命令
将 key 中储存的数字加指定的结果,返回的结果就是加了指定结果后的值,
如果 key 不存在,那么会先创建key的值,然后它的值被初始化为 0 ,然后再执行incr加指定值的操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
127.0.0.1:6379> get age
"17"
127.0.0.1:6379> incrby age 3
(integer) 20
127.0.0.1:6379> incrby age2 5
(integer) 5
127.0.0.1:6379> incrby s1 3
(error) ERR value is not an integer or out of range
127.0.0.1:6379>
incrbyfloat命令
将 key 中储存的数字加上指定浮点值的结果,返回的结果就是加了指定结果后的值,
如果 key 不存在,那么会先创建key的值,然后它的值被初始化为 0 ,然后再执行incr加浮点数值的操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> INCRBYFLOAT age 2.5
"22.5"
127.0.0.1:6379> INCRBYFLOAT age2 2.5
"7.5"
127.0.0.1:6379> get age3
(nil)
127.0.0.1:6379> INCRBYFLOAT age3 2.5
"2.5"
127.0.0.1:6379> INCRBYFLOAT s1 2.5
(error) ERR value is not a valid float
127.0.0.1:6379>
decr
将 key 中储存的数字值减一,返回的结果就是减1后的结果。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行decr操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
127.0.0.1:6379> keys *
1) "name2"
2) "age2"
3) "name1"
4) "value"
5) "age"
6) "age1"
7) "name"
8) "age3"
9) "s1"
127.0.0.1:6379> get age3
"2.5"
127.0.0.1:6379> set age4 7
OK
127.0.0.1:6379> decr age4
(integer) 6
127.0.0.1:6379> decr age4
(integer) 5
127.0.0.1:6379> decr age4
(integer) 4
127.0.0.1:6379> decr age4
(integer) 3
127.0.0.1:6379> decr age4
(integer) 2
127.0.0.1:6379> decr age4
(integer) 1
127.0.0.1:6379> decr age4
(integer) 0
127.0.0.1:6379> decr age4
(integer) -1
127.0.0.1:6379> decr age4
(integer) -2
127.0.0.1:6379> decr age5
(integer) -1
127.0.0.1:6379> decr s1
(error) ERR value is not an integer or out of range
127.0.0.1:6379>
decrby命令
将 key 中储存的数字减指定的结果,返回的结果就是减去指定结果后的值。
如果 key 不存在,那么会先创建key的值,然后它的值被初始化为 0 ,然后再执行decr减指定值的操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
127.0.0.1:6379> decrby age4 7
(integer) -9
127.0.0.1:6379> get age4
"-9"
127.0.0.1:6379> decrby age5
(error) ERR wrong number of arguments for 'decrby' command
127.0.0.1:6379> decrby age6
(error) ERR wrong number of arguments for 'decrby' command
127.0.0.1:6379> keys *
1) "name2"
2) "age2"
3) "age4"
4) "name1"
5) "value"
6) "age"
7) "age5"
8) "age1"
9) "name"
10) "age3"
11) "s1"
127.0.0.1:6379> decrby age12 7
(integer) -7
127.0.0.1:6379> decrby s1 8
(error) ERR value is not an integer or out of range
127.0.0.1:6379>
getrange
获取value指定区间的值。
如果start<end,那么返回下标对应区间的值。
如果end<strart,返回""。
如果end足够大,大于key对应的value的长度,返回整个字符串的长度。
如果end等于-1,返回的也是整个字符串的长度。
127.0.0.1:6379> set str dfsafhsdkfhaskfhsjkafh
OK
127.0.0.1:6379> get str
"dfsafhsdkfhaskfhsjkafh"
127.0.0.1:6379> getrange str 0 3
"dfsa"
127.0.0.1:6379> getrange str 3 0
""
127.0.0.1:6379> getrange str 0 20
"dfsafhsdkfhaskfhsjkaf"
127.0.0.1:6379> getrange str 0 200
"dfsafhsdkfhaskfhsjkafh"
127.0.0.1:6379> getrange str 2 -1
"safhsdkfhaskfhsjkafh"
setrange命令
用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
127.0.0.1:6379> setrange str 0 redis_string
(integer) 22
127.0.0.1:6379> get str
"redis_stringskfhsjkafh"
127.0.0.1:6379> setrange str 16 redis
(integer) 22
127.0.0.1:6379> get str
"redis_stringskfhredish"
127.0.0.1:6379>
getset命令
获取设置key的值并返回原来的旧值
127.0.0.1:6379> getset name lisi
"temp_zhangsan"
127.0.0.1:6379> get name
"lisi"
127.0.0.1:6379>
mget命令
批量获取值
127.0.0.1:6379> keys *
1) "name2"
2) "age2"
3) "age4"
4) "str"
5) "name1"
6) "value"
7) "age"
8) "age5"
9) "age1"
10) "name"
11) "age3"
12) "age12"
13) "s1"
127.0.0.1:6379> mget name name1 name2 age age1
1) "lisi"
2) "temp1"
3) "temp2"
4) "22.5"
5) "1"
127.0.0.1:6379>
mset命令
批量设置值
127.0.0.1:6379> mget name name1 name2 age age1
1) "lisi"
2) "temp1"
3) "temp2"
4) "22.5"
5) "1"
127.0.0.1:6379> mset b1 v1 b2 v2 b3 v3 b4 v4
OK
127.0.0.1:6379> mget b1 b2 b3 b4
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6379>
setex命令
设置key对应的value,同时设置过期时间,单位是秒。
127.0.0.1:6379> setex str1 25 value1
OK
127.0.0.1:6379> ttl str1
(integer) 20
127.0.0.1:6379> ttl str1
(integer) 18
127.0.0.1:6379> ttl str1
(integer) 17
127.0.0.1:6379> ttl str1
(integer) 11
127.0.0.1:6379> ttl str1
(integer) -2
127.0.0.1:6379>
psetex命令
这个命令和 setex命令相似,但它以毫秒为单位设置 key 的生存时间。
127.0.0.1:6379> psetex str2 25 80
OK
127.0.0.1:6379> pttl str2
(integer) -2
127.0.0.1:6379>
setnx命令
只有在 key 不存在时设置 key 的值,如果key存在,失败,返回0。
127.0.0.1:6379> keys *
1) "b4"
2) "name2"
3) "name1"
4) "age"
5) "age5"
6) "age1"
7) "name"
8) "age3"
9) "b2"
10) "age2"
11) "age4"
12) "str"
13) "b1"
14) "value"
15) "b3"
16) "s1"
17) "age12"
127.0.0.1:6379> setnx ss vv
(integer) 1
127.0.0.1:6379> key*
(error) ERR unknown command `key*`, with args beginning with:
127.0.0.1:6379> keys *
1) "b4"
2) "name2"
3) "name1"
4) "age"
5) "age5"
6) "age1"
7) "name"
8) "age3"
9) "b2"
10) "age2"
11) "age4"
12) "str"
13) "b1"
14) "value"
15) "ss"
16) "b3"
17) "s1"
18) "age12"
127.0.0.1:6379> setnx name asd
(integer) 0
127.0.0.1:6379>
msetnx命令
兼具了mset和setnx的特性,但是批量设置中只要有一个key存在,则所有的操作都失效。
127.0.0.1:6379> msetnx z1 v1 z2 v2 z3 v3
(integer) 1
127.0.0.1:6379> msetnx z1 v1 z4 v4 z5 v5
(integer) 0
127.0.0.1:6379>