Reids 字符串命令使用

Posted by 彭楷淳 on 2021-01-25
Estimated Reading Time 5 Minutes
Words 1.1k In Total
Viewed Times

append

使用 append 命令时,如果 key 已经存在,则会直接在 value 后追加值,如果 key 不存在,则会先创建一个 value 为空字符串的 key ,然后再追加:

1
2
3
4
5
6
7
8
127.0.0.1:6379> append k1 hello
(integer) 5
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379> append k1 world
(integer) 10
127.0.0.1:6379> get k1
"helloworld"

decr

decr 命令可以实现对 value 的减 1 操作,如果 key 不存在,则 key 对应的初始值会被置为 0 ,如果 key 的 value 不为数字,则会报错,如下:

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> set k3 19
OK
127.0.0.1:6379> decr k3
(integer) 18
127.0.0.1:6379> get k3
"18"
127.0.0.1:6379> set k4 aa
OK
127.0.0.1:6379> decr k4
(error) ERR value is not an integer or out of range

decrby

decrby 和 decr 类似,不同的是 decrby 可以指定步长,如下:

1
2
3
4
5
6
127.0.0.1:6379> get k3
"8"
127.0.0.1:6379> decrby k3 4
(integer) 4
127.0.0.1:6379> get k3
"4"

get

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

1
2
127.0.0.1:6379> get k5
(nil)

getrange

getrange 用来返回 key 所对应的 value 的子串,子串由 start 和 end 决定,从左往右计算,如果下标是负数,则从右往左计算,其中 -1 表示最后一个字符, -2 是倒数第二个…,如下:

1
2
3
4
5
6
127.0.0.1:6379> set k1 helloworld
OK
127.0.0.1:6379> getrange k1 0 2
"hel"
127.0.0.1:6379> getrange k1 -3 -1
"rld"

getset

getset 命令可以用来获取 key 所对应的 value ,并对 key 进行重置,如下:

1
2
3
4
5
6
7
8
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> getset k1 vv
"v1"
127.0.0.1:6379> get k1
"vv"

incr

incr 操作可以对指定 key 的 value 执行加 1 操作,如果指定的 key 不存在,那么在加 1 操作之前,会先将 key 的 value 设置为 0 ,如果 key 的 value 不是数字,则会报错。如下:

1
2
127.0.0.1:6379> incr k2
(integer) 1

incrby

incrby 和 incr 功能类似,不同的是可以指定增长的步长,如下:

1
2
127.0.0.1:6379> incrby k2 99
(integer) 100

incrbyfloat

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

1
2
3
4
127.0.0.1:6379> set k1 0.5
OK
127.0.0.1:6379> incrbyfloat k1 0.33
"0.83"

mset 与 mget

mset 与 mget 分别用来批量设置值和批量获取值,如下:

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

setex

setex 用来给 key 设置 value ,同时设置过期时间,等效于先给 key 设置 value ,再给 key 设置过期时间,如下:

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

psetex

psetex 的作用和 setex 类似,不同的是,这里设置过期时间的单位是毫秒,如下:

1
2
3
4
127.0.0.1:6379> psetex k1 60000 v1
OK
127.0.0.1:6379> pttl k1
(integer) 55412

setnx

setnx 是 SET if Not eXists 的简写,SET 命令在执行时,如果 key 已经存在,则新值会覆盖掉旧值,而对于 SETNX 命令,如果 key 已经存在,则不做任何操作,如果 key 不存在,则效果等同于 set 命令。如下:

1
2
3
4
5
6
127.0.0.1:6379> setnx k1 v1
(integer) 1
127.0.0.1:6379> setnx k1 vv
(integer) 0
127.0.0.1:6379> get k1
"v1"

msetnx

msetnx 兼具了 setnx 和 mset 的特性,但是 msetnx 在执行时,如果有一个 key 存在,则所有的都不会执行,如下:

1
2
127.0.0.1:6379> msetnx k1 v1 k2 v2
(integer) 0

因为 k1 已经存在,所以 k2 也没执行成功。

setrange

setrange 用来覆盖一个已经存在的 key 的 value ,如下:

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

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

1
2
3
4
5
6
127.0.0.1:6379> set k1 helloredis
OK
127.0.0.1:6379> setrange k1 20 --java
(integer) 26
127.0.0.1:6379> get k1
"helloredis\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00--java"

strlen

strlen 用来计算 key 的 value 的长度,如下:

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

OK,STRING 相关的命令我们就介绍这么多,当然还有很多其他的,可以参考 官方文档

更多干货请移步:https://antoniopeng.com


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !