Redis-3-针对String数据类型的一些操作

概述

上文中,我们看了一些所有数据类型都通用的一些命令,下面再来看一下一些针对String类型独有的命令

操作String类型数据的一些命令

append

追加字符串,如果key存在的话,就直接在value后面追加内容,如果key不存在,就会先创建一个value是空字符串的数据,然后再追加,具体使用方式如下:

1
2
3
4
5
6
7
8
9
10
172.16.12.3:6379> get key1
(nil)
172.16.12.3:6379> append key1 hello
(integer) 5
172.16.12.3:6379> get key1
"hello"
172.16.12.3:6379> append key1 world
(integer) 10
172.16.12.3:6379> get key1
"helloworld"

decr

decr命令可以对指定key的value执行减1的操作.

如果key的value不为数字,则会报错

如果key不存在,则key对应的初始值会被置为0, 然后再进行减1的操作

具体使用如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
172.16.12.3:6379> set k2 20
OK
172.16.12.3:6379> decr k2
(integer) 19
172.16.12.3:6379> get k2
"19"

172.16.12.3:6379> set k3 test
OK
172.16.12.3:6379> decr k3
(error) ERR value is not an integer or out of range

172.16.12.3:6379> decr k4
(integer) -1
172.16.12.3:6379> get k4
"-1"

decrby

和decr差不多,只不过decrby可以指定步长,如下命令,指定减5:

1
2
3
4
5
6
172.16.12.3:6379> get k2
"19"
172.16.12.3:6379> decrby k2 5
(integer) 14
172.16.12.3:6379> get k2
"14"

get

get命令用来获取对应key的value,如果不存在,就返回nil,如下:

1
2
3
4
172.16.12.3:6379> get k2
"14"
172.16.12.3:6379> get k5
(nil)

getrange

跟java的substring类似,用来返回key所对应的value的子串, 需要传入开始的下标和结束的下标

从左往右数每个字符的下标依次是0,1,2,3….

如果是从右往左数的话,下标依次是-1,-2,-3,-4…..

具体使用方式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
172.16.12.3:6379> set k5 helloworld
OK
172.16.12.3:6379>
172.16.12.3:6379> get key5
(nil)
172.16.12.3:6379> get 5
(nil)
172.16.12.3:6379> get k5
"helloworld"
172.16.12.3:6379> getrange k5 0 4
"hello"
172.16.12.3:6379> getrange k5 -5 -1
"world"

getset

getset命令,用来获取指定key所对应的value,并且给这个key设置新的value,具体如下:

1
2
3
4
5
6
172.16.12.3:6379> get k5
"helloworld"
172.16.12.3:6379> getset k5 newvalue
"helloworld"
172.16.12.3:6379> get k5
"newvalue"

incr

incr命令可以对指定key的value进行加1的操作

如果指定key的value不是数字,就会报错

如果指定key不存在,会先将key的value设置为0,然后再加1,最终值也就是1

1
2
3
4
5
6
7
8
9
10
11
12
172.16.12.3:6379> get k2
"14"
172.16.12.3:6379> incr k2
(integer) 15
172.16.12.3:6379> get k2
"15"
172.16.12.3:6379> incr k5
(error) ERR value is not an integer or out of range
172.16.12.3:6379> incr k6
(integer) 1
172.16.12.3:6379> get k6
"1"

incrby

和incr命令相似,只是可以指定步,使用方式如下:

1
2
3
4
5
6
172.16.12.3:6379> get k6
"1"
172.16.12.3:6379> incrby k6 10
(integer) 11
172.16.12.3:6379> get k6
"11"

incrbyfloat

incrbyfloat命令,用来增长浮点数,如下:

1
2
3
4
5
6
172.16.12.3:6379> get k6
"11"
172.16.12.3:6379> incrbyfloat k6 0.5
"11.5"
172.16.12.3:6379> incrbyfloat k6 0.11
"11.61"

mget与mset

批量操作命令,用来批量设置值和批量获取值,如下:

1
2
3
4
5
6
172.16.12.3:6379> mset k1 v1 k2 v2 k3 v3
OK
172.16.12.3:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"

setex

setex命令可以给key同时设置value和过期时间,相当于先给key设置value然后再设置一个有效时间,使用方式如下:

1
2
3
4
5
6
172.16.12.3:6379> setex k1 30 v1
OK
172.16.12.3:6379> ttl k1
(integer) 25
172.16.12.3:6379> get k1
"v1"

psetex

psetex命令和setex类似,只不过设置的时间单位是毫秒,如下:

1
2
3
4
172.16.12.3:6379> psetex k1 100000 v1
OK
172.16.12.3:6379> pttl k1
(integer) 96942

setnx

setnx是 set if not exists, 我们在使用set命令的时候,对于已经存在的key,就会新值覆盖掉旧值

而setnx命令就是说,如果key是存在的,那就不进行任何操作,如果key不存在,那效果跟set命令是一样的,具体使用如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
172.16.12.3:6379> get k2
"v2"
172.16.12.3:6379> get k1
(nil)
172.16.12.3:6379> get k2
"v2"
172.16.12.3:6379> setnx k1 v1
(integer) 1
172.16.12.3:6379> setnx k2 test
(integer) 0
172.16.12.3:6379> get k1
"v1"
172.16.12.3:6379> get k2
"v2"

msetnx

msetnx具备了setnx和mset的特性, 这里有需要注意的一点,如果有一个key存在,那所有的都不会执行,如下:

1
2
3
4
5
6
7
8
9
10
172.16.12.3:6379> get k6
"11.61"
172.16.12.3:6379> get k7
(nil)
172.16.12.3:6379> msetnx k6 v6 k7 v7
(integer) 0
172.16.12.3:6379> get k6
"11.61"
172.16.12.3:6379> get k7
(nil)

因为k6是存在的,所以k7也没执行成功

setrange

setrange命令,用来覆盖一个已经存在的key的value,使用方式如下:

1
2
3
4
5
6
7
8
172.16.12.3:6379> set k1 helloworld
OK
172.16.12.3:6379> get k1
"helloworld"
172.16.12.3:6379> setrange k1 5 redis
(integer) 10
172.16.12.3:6379> get k1
"helloredis"

如果已经存在的key的value长度小于offset,则不足的地方用0补齐,如下:

1
2
3
4
172.16.12.3:6379> setrange k1 20 --java
(integer) 26
172.16.12.3:6379> get k1
"helloredis\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00--java"

strlen

strlen命令用来计算指定key对应的value的长度,如下:

1
2
172.16.12.3:6379> strlen k1
(integer) 26

关于string类型的常用命令,就先写这么多,如果需要用到其他的命令,可以去官方文档中查找