23

Redis 字符串相关命令

 3 years ago
source link: https://mp.weixin.qq.com/s/dSaFCcdaajN126L5Di8OzA
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Redis 支持多种数据结构,比如 字符串、列表、集合、有序集合 和 哈希 等数据结构。本次我整理了关于 字符串 相关的命令,也就是关于 Strings 相关的命令,如下图。

quUrIfu.png!web

         上图中用红色圈中的部分,就是关于 字符串 相关的命令。如果想要在 Redis 中查看相关的命令也可以使用  help  命令来进行查看,命令如下。

127.0.0.1:6379> help @string

在按下回车后,可以看到相应分类命令的说明,如下图。

e67be2q.png!web

图中就是部分关于 Strings 相关的部分命令。

常用 Strings 相关命令

为了大家能够直接复制命令进行测试,下面我就不截图了。

1、set 命令

set 命令的作用是 设置一个 key 的 value 值

设置 key 对应的字符串类型

127.0.0.1:6379> set key1 value1

OK

127.0.0.1:6379> set key2 value2

OK

127.0.0.1:6379> get key1

"value1"

127.0.0.1:6379> get key2

"value2"

上面的命令分别对 key1 设置为 value1,对 key2 设置为 value2。

set 命令除了基本的用法外,还有几个参数,先来说一下 nx 和 xx 两个参数。

nx 表示 key 不存在时,执行操作

xx 表示 Key 存在时,执行操作

127.0.0.1:6379> set k1 v1 nx

OK

127.0.0.1:6379> keys *

1) "k1"

127.0.0.1:6379> set k2 v2 xx

(nil)

127.0.0.1:6379> keys *

1) "k1"

命令 set k1 v1 nx 表示,当 k1 不存在时,给 k1 设置字符串值为 v1,此时 k1 并不存在,因此该命令被执行;

命令 set k2 v2 xx 表示,当 k2 存在时,给 k2 设置字符串值为 v2,此时 k2 并不存在,因此该命令没有被执行

再介绍另外两个参数,分别是 ex 和 px,ex 和 px 是在进行 set 命令时可以设置过期时间的命令

ex 表示 设置的过期时间以秒为单位

px 表示 设置的过期时间以毫秒为单位

127.0.0.1:6379> set k2 v2 ex 5

OK

127.0.0.1:6379> ttl k2

(integer) 3

127.0.0.1:6379> ttl k2

(integer) 0

127.0.0.1:6379> ttl k2

(integer) -2

127.0.0.1:6379> ttl k2

(integer) -2

127.0.0.1:6379> set k2 v2 px 5000

OK

127.0.0.1:6379> ttl k2

(integer) 3

127.0.0.1:6379> ttl k2

(integer) 2

127.0.0.1:6379> ttl k2

(integer) 0

127.0.0.1:6379> ttl k2

(integer) -2

127.0.0.1:6379> ttl k2

(integer) -2

127.0.0.1:6379>

127.0.0.1:6379> set k2 v2 px 5000

OK

127.0.0.1:6379> pttl k2

(integer) 3243

127.0.0.1:6379> pttl k2

(integer) -2

2、setnx 命令

setnx 命令的作用是 当指定的键不存在时给该键设置一个值

该命令类似 set 命令附带了 nx 参数

127.0.0.1:6379> keys *

1) "k1"

2) "key2"

3) "key1"

127.0.0.1:6379> setnx k1 value1

(integer) 0

127.0.0.1:6379> setnx k2 value2

(integer) 1

127.0.0.1:6379> keys *

1) "k1"

2) "key2"

3) "key1"

4) "k2"

在上面的命令中,setnx k1 value1,由于 k1 存在,因此命令没有被执行,setnx k2 value2,由于 k2 不存在,因此命令被执行。

当命令执行成功,返回值为 1

当命令执行不成功,返回值为 0

3、get 命令

get 命令的作用是 获取指定 key 的值

该命令已经被多次使用了,演示如下:

127.0.0.1:6379> keys *

1) "k1"

2) "key2"

3) "key1"

4) "k2"

127.0.0.1:6379> get k1

"v1"

127.0.0.1:6379> get k2

"value2"

127.0.0.1:6379> get key1

"value1"

127.0.0.1:6379> get key2

"value2"

4、getset 命令

getset 命令的作用是  设置一个 key 的 value,并获取设置前的值

该命令相当于 先对指定的 key 进行一次 get 操作,再执行一次 set 操作,两个命令合并,可以保证原子性。

127.0.0.1:6379> get k1

"v1"

127.0.0.1:6379> getset k1 11111

"v1"

127.0.0.1:6379> get k1

"11111"

5、mget 命令

mget 命令的作用是 一次获取多个 key 的值,如果 key 不存在则返回 nil

127.0.0.1:6379> keys *

1) "k1"

2) "key2"

3) "key1"

4) "k2"

127.0.0.1:6379> mget k1 key2 key3

1) "11111"

2) "value2"

3) (nil)

可以看到,key3 是不存在的,因此 key3 返回的值是 nil

6、mset 命令

mset 命令的作用是  设置多个key value

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"

127.0.0.1:6379>

7、msetnx 命令

msetnx 命令的作用是  设置多个key value,仅当key不存在时

127.0.0.1:6379> msetnx k4 vv4 k5 vv5

(integer) 1

127.0.0.1:6379> mget k4 k5

1) "vv4"

2) "vv5"

127.0.0.1:6379> msetnx k4 v4 k5 v5 k6 v6

(integer) 0

127.0.0.1:6379> keys *

1) "k2"

2) "k3"

3) "k1"

4) "k5"

5) "k4"

127.0.0.1:6379> mget k4 k5

1) "vv4"

2) "vv5"

127.0.0.1:6379>

可以看出,msetnx k4 vv4 k5 vv5 时,此时不存在 k4 和 k5 因此该命令执行成功,在执行 msetnx k4 v4 k5 v5 k6 v6 时,由于 k4 和 k5 已经存在,则使得这条命令执行失败,因此 k4 和 k5 的值仍然是 vv4 和 vv5,并且没有 k6 这个 key。

8、incr 命令

incr 命令的作用是  执行原子加1操作

127.0.0.1:6379> set k100 100

OK

127.0.0.1:6379> incr k100

(integer) 101

127.0.0.1:6379> get k100

"101"

9、decr 命令

decr 命令的作用是  整数原子减1

127.0.0.1:6379> decr k100

(integer) 100

127.0.0.1:6379> decr k100

(integer) 99

127.0.0.1:6379> get k100

"99"

10、incrby 命令

incrby 命令的作用是  执行原子增加一个整数

127.0.0.1:6379> incrby k100 100

(integer) 199

127.0.0.1:6379> incrby k100 200

(integer) 399

127.0.0.1:6379> get k100

"399"

11、decrby 命令

decrby 命令的作用是  原子减指定的整数

127.0.0.1:6379> decrby k100 100

(integer) 299

127.0.0.1:6379> decrby k100 300

(integer) -1

127.0.0.1:6379> get k100

"-1"

12、incrbyfloat 命令

incrbyfloat 命令的作用是  执行原子增加一个浮点数

127.0.0.1:6379> incrbyfloat k100 0.1

"-0.9"

127.0.0.1:6379> incrbyfloat k100 100.2

"99.3"

127.0.0.1:6379> get k100

"99.3"

13、setrange 命令

setrange 命令的作用是 修改字符串指定偏移的值

127.0.0.1:6379> set kstr hello

OK

127.0.0.1:6379> setrange kstr 1 a

(integer) 5

127.0.0.1:6379> get kstr

"hallo"

127.0.0.1:6379> setrange kstr 6 x

(integer) 7

127.0.0.1:6379> get kstr

"hallo\x00x"

127.0.0.1:6379> setrange kstr 0 123

(integer) 7

127.0.0.1:6379> get kstr

"123lo\x00x"

127.0.0.1:6379> setrange kstr 5 k

(integer) 7

127.0.0.1:6379> get kstr

"123lokx"

字符串的偏移从 0 开始,hello 的长度为 5,最后 1 个下标为 4,当我们 setrange kstr 6 x 时,我们将 kstr 下标 6 的位置设置为了 x,因此在下标 5 的位置处给了一个 \x00,即 ASCII 码的 0。

14、getrange 命令

getrange 命令的作用是  获取存储在key上的值的一个子字符串

127.0.0.1:6379> get kstr

"123lokx"

127.0.0.1:6379> getrange kstr 1 2

"23"

127.0.0.1:6379> getrange kstr 0 -1

"123lokx"

127.0.0.1:6379> getrange kstr 0 -2

"123lok"

127.0.0.1:6379> getrange kstr 3 5

"lok"

下标 -1 为最后一个下标,下标 -2 为倒数第二个下标

15、append 命令

append 命令的作用是  追加一个值到key上

127.0.0.1:6379> append kstr 1234

(integer) 11

127.0.0.1:6379> get kstr

"123lokx1234"

127.0.0.1:6379> append kstr 4321

(integer) 15

127.0.0.1:6379> get kstr

"123lokx12344321"

总结

这些基础的命令当中,除了可以当作基础的操作 字符串 的命令来用,也有其他方面的用处,比如在高并发当中可以用来设置锁等。把今天整理的命令完善了一个思维导图,图片如下。

U7N7fay.jpg!web

思维导图会逐步的进行完善,到时也会把完整的思维导图进行分享。 希望大家可以给我一些动力,点一下右下角的“在看”吧。

3ymiime.jpg!web

喜欢就点在看哦~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK