dot Redis 8 已发布——并且是开源的

了解更多

1.1.3 为什么选择 Redis?

返回主页

1.1.3 为什么选择 Redis?

如果您以前使用过 memcached,您可能知道可以使用 APPEND 将数据添加到现有字符串的末尾。memcached 的文档指出 APPEND 可用于管理项目列表。太棒了!您可以将项目添加到您正在处理的列表的字符串的末尾。但是如何删除项目呢?memcached 的答案是使用黑名单来隐藏项目,以避免读取/更新/写入(或数据库查询和 memcached 写入)。在 Redis 中,您可以使用 LISTSET,然后直接添加和删除项目。

通过使用 Redis 而不是 memcached 来解决这个问题和其他问题,您的代码不仅可以更短、更容易理解和更容易维护,而且速度更快(因为您不需要读取数据库来更新您的数据)。您还会发现,在许多其他情况下,Redis 比关系数据库更有效和/或更易于使用。

数据库的一个常见用途是将长期报告数据存储为固定时间范围内的聚合。为了收集这些聚合,通常的做法是将行插入到报告表中,然后再扫描这些行以收集聚合,然后更新聚合表中的现有行。之所以插入行,是因为对于大多数数据库来说,插入行是一个非常快的操作(插入写入到磁盘文件的末尾,这与 Redis 的仅追加日志非常相似)。但是,更新表中的现有行相当慢(它可能会导致随机读取,并且可能导致随机写入)。在 Redis 中,您可以使用原子 INCR 命令直接计算聚合 — 对 Redis 数据的随机写入总是很快的,因为数据始终在内存中,2 并且对 Redis 的查询不需要通过典型的查询解析器/优化器。

通过使用 Redis 而不是关系数据库或其他主要基于磁盘的数据库,您可以避免写入不必要的临时数据,避免需要扫描和删除这些临时数据,并最终提高性能。这些都是简单的示例,但它们表明您选择的工具如何极大地影响您解决问题的方式。

当您继续阅读有关 Redis 的信息时,请尽量记住,我们所做的一切几乎都是为了实时解决问题(第 6 章中的任务队列除外)。我展示了技巧,并提供了工作代码,以帮助您消除瓶颈、简化代码、收集数据、分发数据、构建实用程序,以及总的来说,使您构建软件的任务更容易。如果做得好,您的软件甚至可以扩展到让其他使用所谓 Web 规模技术的人脸红的水平。

我们可以继续讨论 Redis 有什么、能做什么,甚至为什么。或者我可以向您展示。在下一节中,我们将讨论 Redis 中可用的结构、它们可以做什么,以及用于访问它们的一些命令。

2 公平地说,memcached 也可以用于这种简单的场景,但使用 Redis,您的聚合可以放置在将相关聚合保存在一起以便于访问的结构中;这些聚合可以是排序聚合序列的一部分,用于实时保持一个顶级列表;并且这些聚合可以是整数或浮点数。