如同表 1.1 所示,Redis 允许我们存储映射到五种不同数据结构类型之一的键;字符串、列表、集合、哈希 和 有序集合。这五种不同的结构中,一些共享了多个命令 (DEL、TYPE、RENAME 和其他命令),也有一些命令只能由其中一种或两种的结构使用。我们将在第 3 章中更深入地了解可用命令。
在 Redis 中可用的五种结构中,大多数程序员会熟悉字符串(STRING)、列表(LIST)和哈希(HASH)表。它们的实现和语义与在各种其他语言中构建的相同结构类似。一些编程语言还具有一个设置数据结构,其在实现和语义上可与 Redis 集合(SET)相媲美。有序集合(ZSET)在某种程度上对 Redis 而言是唯一的,但当我们开始使用它们时会发现它们非常方便。表 1.2 中显示了对 Redis 中可用的五种结构及其包含内容的比较以及对其语义的简要说明。
命令列表 在本节中讨论每种数据类型时,您会发现在命令小型列表。在第 3 章中可以找到每种类型的命令更完整(但部分)的列表。如果您需要带文档的完整命令列表,可以访问 https://redis.ac.cn/commands。
在整个本节中,您将了解如何表示这五个结构,并且可以开始使用 Redis 命令,以为后面的章节做好准备。在本书中,所有示例均以 Python 提供。如果您已按照附录 A 中的说明安装了 Redis,那么在此过程中您还应该已安装 Python 和必要的库,以使用 Python 从 Redis 使用。如果可能,您应该安装了 Redis、Python 和 redis-py 库的计算机,以便您可以在阅读时尝试所有操作。表 1.2 Redis 中可用的五种结构
结构类型 | 其包含内容 | 结构读/写能力 |
---|---|---|
STRING(字符串) | 字符串、整数或浮点值 | 对整个字符串、部分进行操作,增量/减量整数和浮点数 |
LIST(列表) | 字符串的链表 | 在两端压入或弹出项目,基于偏移量进行修剪,读取单个或多个项目,按值查找或移除项目 |
SET(集合) | 唯一字符串的无序集合 | 添加、获取或删除单个项目,检查成员资格,求交集、并集、差集,获取随机项目 |
HASH(哈希) | 从键到值的无序哈希表 | 添加、获取或删除单个项目,提取整个哈希表 |
ZSET(有序集合) | 按分数对字符串成员进行有序映射,按分数排序 | 添加、获取或删除单个值,基于分数范围或成员值提取项目 |
关于安装 Redis 和 Python 的提醒 在继续之前,您需要安装 Redis 和 Python。同样,可以在附录 A 中找到 Redis 和 Python 的快速简易的安装说明。对于基于 Debian 的 Linux 发行版,更快速更简易的说明如下:从 https://redis.ac.cn/download 下载 Redis,提取,运行 make && sudo make install,然后运行 sudo python -m easy_install redis hiredis(hiredis 是一个可选的提高性能的 C 库)。
如果您熟悉过程式或面向对象编程语言,那么 Python 应该是易于理解的,即使您之前从未使用过它。如果您使用其他语言与 Redis 合作,您应该能够翻译我们将 Python 用做的方法到您的语言,尽管 Redis 命令及其参数名称的拼写(或排序方式)可能会不同。
其他语言中的 Redis 尽管本书中没有包含所有代码清单,不过所有可以转换的代码清单都已翻译成 Ruby、JavaScript 和 Java,您可以从 Manning 网站下载或从本书的 Manning 论坛链接下载。此翻译后的代码还包括类似的描述性注释,以便您可以以您选择的语言进行操作。
出于风格上的考虑,我尽量减少使用 Python 的更多高级功能,编写函数来针对 Redis 执行操作,而不是构建类或以其他方式操作。我这样做是为了防止 Python 的语法干扰本书的焦点,而本书的焦点在于使用 Redis 解决问题,而不是“看看我们能用 Python 做什么很酷的东西”。对于本节内容,我们将使用 redis-cli 控制台与 Redis 进行交互。让我们开始了解 Redis 中最第一个、也最简单的结构:字符串。