set和get

set:向库中添加string键值对

多次添加相同key的记录时,会覆盖原来键对应的值

get:取出key对应的值

如果key对应的值不存在,返回nil

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 添加两条记录
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
# 查看当前库中所有的key
127.0.0.1:6379> keys *
1) "k2"
2) "k1"
# 查看k1对应的值
127.0.0.1:6379> get k1
"v1"
# 添加键为k1的一条记录
127.0.0.1:6379> set k1 value1
OK
# 查看k1对应的值
127.0.0.1:6379> get k1
"value1"
# 获取k3对应的值
127.0.0.1:6379> get k3
(nil)

setnx

向库中添加string键值对,只有key不存在时才能设置,key已经存在时就不能设置,注意和set的区别

设置不成功时返回0

1
2
3
4
127.0.0.1:6379> setnx k1 8
(integer) 0
127.0.0.1:6379> setnx k3 v3
(integer) 1

append

追加内容到key对应的值上

返回值为追加后的字符串长度

1
2
3
4
5
6
7
8
9
# 获取k1对应的值
127.0.0.1:6379> get k1
"value1"
# 追加abc到k1对应的值的后面
127.0.0.1:6379> append k1 abc
(integer) 9
# 获取k1对应的值
127.0.0.1:6379> get k1
"value1abc"

strlen

得到key对应的值的长度

如果key对应的值不存在,返回0

1
2
3
4
5
6
# 获取k1对应的值长度
127.0.0.1:6379> strlen k1
(integer) 9
# 获取k3对应的值的长度
127.0.0.1:6379> strlen k3
(integer) 0

incr和decr

incr:使key对应的值增1

decr:使key对应的值减1

注意:只有key对应的值为数字时才能使用

当incr或者decr后面的key不存在时,会自动创建,值默认为0,在0的基础上加1或者减1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 设置键值对k4
127.0.0.1:6379> set k4 1
OK
# 增1
127.0.0.1:6379> incr k4
(integer) 2
# 增1
127.0.0.1:6379> incr k4
(integer) 3
# 减1
127.0.0.1:6379> decr k4
(integer) 2
# 减1
127.0.0.1:6379> decr k4
(integer) 1
# 试图让k1对应的值增1,报错
127.0.0.1:6379> incr k1
(error) ERR value is not an integer or out of range
# 当incr或者decr后面的key不存在时,会自动创建,值默认为0
# 0的基础加1
127.0.0.1:6379> incr k5
(integer) 1
# 0的基础减1
127.0.0.1:6379> decr k6
(integer) -1

incrby和decrby

这个是incr、decr的升级版,可以自定义自增和自减的步长

注意:只有key对应的值为数字时才能使用

当incr或者decr后面的key不存在时,会自动创建,值默认为0,在0的基础上加步长或者减步长

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 使k4增10
127.0.0.1:6379> incrby k4 10
(integer) 11
# 使k4增100
127.0.0.1:6379> incrby k4 100
(integer) 111
# 使k4减10
127.0.0.1:6379> decrby k4 10
(integer) 101
# 使k4减100
127.0.0.1:6379> decrby k4 100
(integer) 1
# 当incr或者decr后面的key不存在时,会自动创建,值默认为0
# 0的基础加100
127.0.0.1:6379> decrby k8 100
(integer) -100
# 0的基础减100
127.0.0.1:6379> incrby k9 100
(integer) 100

mset和mget

mset可以同时设置多个键值对

mget可以同时获取多个键对应的值

1
2
3
4
5
6
7
8
# 同时设置三个键值对
127.0.0.1:6379> mset key1 value1 key2 value2 key3 value3
OK
# 同时获取三个键对应的值
127.0.0.1:6379> mget key1 key2 key3
1) "value1"
2) "value2"
3) "value3"

msetnx

这个也可以同时设置多个键值对,和mset不同的是,这个设置的键值对中,如果之前存在了key,那么整个语句就不会执行成功,即有一个失败都失败

1
2
3
4
5
6
# 之前存在了key3,所以语句不会执行成功,包括key4也不会生效
127.0.0.1:6379> msetnx key3 value3 key4 value4
(integer) 0
# 这个可以设置成功,原因在于没有和以及存在的键值对冲突
127.0.0.1:6379> msetnx key4 value4 key5 value5
(integer) 1

getrange

获取key对应的值的子字符串

语法:getrange <key> <起始位置> <结束位置>,(包含起始位置和结束位置)

1
2
3
4
5
6
# 获取k1的键值对
127.0.0.1:6379> get k1
"value1abc"
# 截取k1的0~4位
127.0.0.1:6379> getrange k1 0 4
"value"

setrange

覆写对应位置的字符串,从起始位置出发

语法:setrange <key> <起始位置>

1
2
3
4
5
6
7
8
9
# 获取k1的键值对
127.0.0.1:6379> get k1
"value1abc"
# 从第五位开始覆写
127.0.0.1:6379> setrange k1 5 ikun
(integer) 9
# 获取k1的键值对
127.0.0.1:6379> get k1
"valueikun"

setex

设置键值对的同时,设置其过期时间

语法:setex <key> <过期时间> <value>

1
2
3
4
5
6
7
8
9
10
11
12
# 设置key6键值对的同时,设置其过期时间为60秒
127.0.0.1:6379> setex key6 60 value6
OK
# 获取key6的过期时间
127.0.0.1:6379> ttl key6
(integer) 48
127.0.0.1:6379> ttl key6
(integer) 41
127.0.0.1:6379> ttl key6
(integer) 31
127.0.0.1:6379> ttl key6
(integer) -2

getset

以新值替换旧值,同时返回旧值

1
2
3
4
5
6
7
8
9
# 获取k1的键值对
127.0.0.1:6379> get k1
"valueikun"
# 使用getset,返回旧值
127.0.0.1:6379> getset k1 ikun
"valueikun"
# 获取k1的键值对
127.0.0.1:6379> get k1
"ikun"