问题 Redis可以写出像PostgreSQL这样的数据库吗?


我一直在使用PostgreSQL。我的所有数据都存在于Postgres中。我最近研究过redis,它有很多强大的功能,否则需要在Django(python)中做几行。 Redis数据是持久的,只要它运行的机器没有停机,您可以将其配置为每1000个键或每5分钟左右写入存储到磁盘的数据,具体取决于您的选择。

Redis会创建一个很好的缓存,它肯定会取代我在python中编写的许多函数(投票给用户的帖子,查看他们的朋友列表等等)。但我担心的是,所有这些数据都需要转化为postgres。我不相信将这些数据存储在redis中。我认为redis是一种临时存储解决方案,可以快速检索信息。它非常快,远远超过对postgres进行重复查询。

我假设我在技术上将redis数据写入数据库的唯一方法就是保存()通过Django从redis到postgres数据库的'get'查询得到的任何东西。

这是我能想到的唯一解决方案。你知道这个问题的其他解决方案吗?


12197
2018-06-10 21:16


起源

我在这里找到了一个类似的问题: stackoverflow.com/questions/16234221/... 。我相信操作是在问类似的东西,但答案并不是我想要的。 - noahandthewhale
我们有一个实现API的Web服务器,我们使用Redis作为缓存。当一个 POST 随着新数据的进入,我们将数据存储在Redis中,并通知后台进程这些新数据,并将进程推送到(MySql)数据库(我们使用Redis列表将数据推送到进程)。要读取数据,我们首先检查Redis,如果没有数据,我们从数据库中获取它们,放到Redis,然后返回到客户端。 - akonsu


答案:


Redis越来越多地被用作缓存层,就像更复杂的memcached一样,并且在这个角色中非常有用。您通常使用Redis作为 写通 缓存您想要持久的数据,以及 回写 对于您可能想要累积的数据然后批量写入(您可以承受丢失最近的数据)。

PostgreSQL的 LISTEN 和 NOTIFY system对于进行选择性缓存失效非常有用,让你在PostgreSQL中更新时可以清除Redis中的记录。

将它与PostgreSQL结合使用 Andrew Dunstain和Dave Page正在研究的Redis外国数据包装提供商 很有意思。

我不知道有任何工具可以使Redis成为PostgreSQL的透明回写缓存。他们的数据模型可能太不相同,无法正常工作。通常,您使用listen / notify将更改写入PostgreSQL并使其Redis缓存条目无效,或者在Redis中对更改进行排队,然后让您的应用程序将其读出并将其写入Pg中。


15
2018-06-11 06:03