当我已经使用PostgreSQL作为Django的数据库时,为什么还要使用Redis?

62

我有一个Django应用程序,目前托管在亚马逊的EC2服务上。我有两台机器,一台有Django应用程序,另一台有我的PostgreSQL数据库。到目前为止,它一直非常稳定。

许多来源声称我应该将Redis实现到我的堆栈中,但是将Redis与Django和PostgreSQL一起实现的目的是什么?例如,我如何在Django代码中实现Redis?

我如何将其与PostgreSQL一起使用?

这些都是我一直在寻找答案的问题,所以我来到这里希望从最好的人那里得到答案。非常感谢任何答案。

谢谢


1
我以前听过这个,我认为有些人使用Redis进行缓存。 - César
1
除了缓存,他们还用它来做其他事情吗?这是让我困惑的一部分。不知何故,人们已经成功地将其与Django和PostgreSQL配合使用。 - deadlock
它解决了你的问题吗? - Frank Heikens
@FrankHeikens 嘿!目前我没有问题,我只是在尝试弄清楚为什么我需要redis以及如何在我的Django代码中与Postgresql一起使用它。 - deadlock
12
简单来说,不要去修复你没有的问题。你可能会弄坏其他东西...... - Frank Heikens
1个回答

89

Redis 是一种键值存储系统,它在 RAM 内存中运行,就像一个“轻型数据库”,由于它在 RAM 内存级别工作,与读/写 PostgreSQL 或任何其他传统 关系型数据库 相比,速度快了几个数量级。Redis 是所谓的 NoSQL 数据库,例如 Mongo 和许多其他数据库。它不能直接替换 PostgreSQL,因为您仍然需要永久存储,但它可以作为备用存储系统与关系型数据库一起使用。如果您的 IO 操作开始变得昂贵,您可以使用 Redis,并且它非常适合快速计算和基于键的查询。

您可以使用包装器将其包含在 Django/Python 项目中,例如 redis-py

Redis非常简单易用,你可以查看redis-py上的示例。Redis独立于任何关系型数据库,因此您可以将其用于缓存、计算或永久/临时存储值。它可以帮助减少对PostgreSQL的查询,最终您可以按照自己的方式使用它并从中获益,以改善应用程序/架构。
这个类似的问题可以帮助你Redis with Django

谢谢您的快速回复!我该如何在PostgreSQL中使用它?我的困惑在于应用程序将如何工作。Django会从Redis中提取信息,然后再从PostgreSQL中提取信息吗?如果是这样,它如何提取这些信息呢? - deadlock
3
我已更新我的回答,你需要花几分钟阅读我发布的链接,我相信你会理解的。 - PepperoniPizza
1
我不确定Redis是否真的“快了好几个数量级”。我测试过它(写入读取10E5对键值)。我发现Redis快了2倍。在很多情况下,如果您的缓存在1ms或2ms内提供结果,实际上并没有太大关系。我在这里找到了类似的结果http://code.jjb.cc/benchmarking-postgres-vs-redis。 - Shimon S
原始答案发布已经将近10年了,我们是否仍需要通过牺牲可能更快的响应时间、增加额外系统的复杂性、缓存失效问题和冷启动问题来减轻Postgres中“真理之南”的负载? - mishka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接