(书)如何管理redis数据库-5.如何在Redis中管理字符串

介绍

Redis是一个开源的内存中键值数据存储。在Redis中,字符串是您可以创建和管理的最基本的值类型。本教程概述了如何创建和检索字符串以及如何操作字符串键所保存的值。

如何使用本指南

本指南以备有完整示例的备忘单形式编写。我们鼓励您跳至与您要完成的任务相关的任何部分。

本指南中显示的命令已在运行Redis版本的Ubuntu 18.04服务器上进行了测试 4.0.9。要设置类似的环境,您可以按照我们的指南如何在Ubuntu 18.04上安装和保护Redis的步骤1进行操作。我们将通过使用Redis命令行界面运行它们来演示这些命令的行为。请注意,如果您使用其他Redis界面(例如Redli),则某些命令的确切输出可能会有所不同。 redis-cli

另外,您可以提供一个托管的Redis数据库实例来测试这些命令,但是请注意,根据数据库提供者所允许的控制级别,本指南中的某些命令可能无法按所述方式工作。要配置DigitalOcean托管数据库,请遵循我们的托管数据库产品文档。然后,您必须 安装Redli 设置TLS隧道才能通过TLS连接到托管数据库。

创建和管理字符串

包含字符串的键只能包含一个值。您不能在一个键中存储多个字符串。但是,Redis中的字符串是二进制安全的,这意味着Redis字符串可以保存任何类型的数据,从字母数字字符到JPEG图像。唯一的限制是字符串的长度必须小于或等于512 MB。

要创建字符串,请使用set命令。例如,以下set命令创建一个名为key的键key_Welcome1,该键包含字符串"Howdy"

  * set key_Welcome1 "Howdy" 


Output

OK 

要在一个命令中设置多个字符串,请使用mset

* mset key_Welcome2 "there" key_Welcome3 "partners," 

您还可以使用以下append命令创建字符串:

* append key_Welcome4 "welcome to Texas" 

如果成功创建了字符串,append将输出等于该字符串包含多少个字符的整数:

Output

(integer) 16 

注意,append也可以用来更改字符串的内容。有关详细信息,请参见有关处理字符串的部分。

检索字符串

要检索字符串,请使用以下get命令:

  * get key_Welcome1 


Output

"Howdy" 

要使用一个命令检索多个字符串,请使用mget

  * mget key_Welcome1 key_Welcome2 key_Welcome3 key_Welcome4 


Output

1) "Howdy" 2) "there" 3) "partners," 4) "welcome to Texas" 

对于传递给mget它的每个键都不包含字符串值或根本不存在,该命令将返回nil

操纵弦

如果字符串由整数组成,则可以运行incr命令将其增加一:

  * set key_1 3 
  * incr key_1 


Output

(integer) 4 

同样,您可以使用以下incrby命令将数字字符串的值增加特定的增量:

  * incrby key_1 16 


Output

(integer) 20 

decrdecrby命令的工作方式相同,但他们减少存储在数字字符串的整数:

  * decr key_1 


Output

(integer) 19 

  * decrby key_1 16 


Output

(integer) 3 

如果字母字符串已经存在,append则将值附加到现有值的末尾并返回字符串的新长度。为了说明这一点,以下命令将附加", y'all"到key所保存的字符串上key_Welcome4,因此现在该字符串将显示为"welcome to Texas, y'all"

  * append key_Welcome4 ", y'all" 


Output

(integer) 15 

您也可以将整数附加到包含数字值的字符串中。以下示例附加453,其中包含整数key_1,因此它将保持345。在这种情况下,append还将返回字符串的新长度,而不是其新值:

  * append key_1 45 


Output

(integer) 3 

由于此键仍仅保留数字值,因此可以对其执行incrdecr操作。您也可以在整数字符串后面附加字母字符,但是如果这样做,则在字符串上运行incr和运行decr都会产生错误,因为字符串值不再是整数。

结论

本指南详细介绍了许多用于在Redis中创建和管理字符串的命令。如果您想在本指南中概述其他相关的命令,参数或过程,请在下面的注释中提出疑问或提出建议。