如果您熟悉关系数据库,您无疑已经编写了 SQL 查询来关联表之间的数据。 Redis 是一种通常被称为 No SQL 或 非关系型 的数据库类型。 在 Redis 中,没有表,也没有数据库定义或强制执行的将 Redis 中的数据与 Redis 中的其他数据相关联的方式。
经常会听到将 Redis 与 memcached 进行比较,memcached 是一种非常高性能的键值缓存服务器。 与 memcached 一样,Redis 也可以存储键到值的映射,甚至可以达到与 memcached 相似的性能水平。 但相似之处很快就结束了 —— Redis 支持以两种不同的方式自动将其数据写入磁盘,并且除了像 memcached 那样使用纯字符串键之外,还可以将数据存储在四种结构中。 这些和其他差异使 Redis 能够解决更广泛的问题,并允许 Redis 用作主数据库或与其他存储系统一起用作辅助数据库。
在后面的章节中,我们将介绍一些示例,这些示例展示了 Redis 如何用作数据的主要和辅助存储介质,支持各种用例和查询模式。 一般来说,许多 Redis 用户会选择仅在需要 Redis 的性能或功能时才将数据存储在 Redis 中,而对于性能较慢或数据太大而无法经济地存储在内存中的数据,则使用其他关系型或非关系型数据存储。 在实践中,您将根据您希望数据存储的位置(主要在 Redis 中,还是主要在其他地方并在 Redis 中有一个副本)、如何确保数据完整性(复制、持久性和事务)以及 Redis 是否满足您的需求来做出判断。
为了了解 Redis 在可用的各种数据库和缓存软件中的位置,您可以在表 1.1 中看到 Redis 功能重叠的几种不同类型的缓存或数据库服务器的不完整列表。
名称 | 类型 | 数据存储选项 | 查询类型 | 附加功能 |
---|---|---|---|---|
Redis | 内存中 非关系型数据库 |
字符串、列表、集合、哈希、排序集合 | 每种数据类型的命令用于常见的访问模式,具有批量操作和部分事务支持 | 发布/订阅、主/从复制、磁盘持久化、脚本(存储过程) |
memcached | 内存键值缓存 | 键到值的映射 值 |
用于创建、读取、更新、删除以及其他一些操作的命令 | 用于提高性能的多线程服务器 |
MySQL | 关系数据库 | 包含行表的数据库、表上的视图、空间和第三方扩展 | SELECT、INSERT、UPDATE、DELETE、函数、存储过程 过程 |
符合 ACID(使用 InnoDB)、主/从和主/主复制 |
PostgreSQL | 关系数据库 | 包含表的数据库 包含行的表、表上的视图、空间和第三方扩展、可自定义类型 |
SELECT、INSERT、UPDATE、DELETE、内置函数、自定义存储过程 | 符合 ACID、主/从复制、多主复制(第三方) |
MongoDB | 磁盘上 非关系型文档存储 |
包含无模式 BSON 文档表的数据库 | 用于创建、读取、更新、删除、条件查询的命令 以及更多 |
支持 Map-Reduce 操作、主/从复制、分片、空间索引 |
Redis 是一种持久性的非关系型内存数据库,它具有多种数据存储选项,包括字符串、列表、集合、哈希和排序集合。